numpy array functions 数组操作的基本函数入门(一)

NumPy 是 Python 科学计算的基础包。之前的文章中我们也numpy的数据类型,基本结构做了入门的讲解,本篇开始介绍numpy 数组相对应的操作函数。

NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等。

三角函数

    # 标准的三角函数:sin()、cos()、tan();
    # arcsin,arccos,和 arctan 函数返回给定角度的 sin,cos 和 tan 的反三角函数。
    # 函数的结果可以通过 numpy.degrees() 函数将弧度转换为角度
    a = np.array([0, 30, 45, 60, 90])
    print("a = ", a)
    print("正弦: np.sin(a * np.pi /180) = ", np.sin(a * np.pi/180))
    print("余弦: np.cos(a * np.pi / 180) = ", np.cos(a * np.pi / 180))
    sin = np.sin(a * np.pi/180)
    inv = np.arcsin(sin)
    print("sin = np.sin(a * np.pi/180)", "\n", "inv = np.arcsin(sin)")
    print("反正弦(弧度):np.arcsin(sin) = ", inv)
    deg = np.degrees(inv)
    print("角度:np.degrees(inv) ", deg)
输出的结果:
a =  [ 0 30 45 60 90]
正弦: np.sin(a * np.pi /180) =  [0.         0.5        0.70710678 0.8660254  1.        ]
余弦: np.cos(a * np.pi / 180) =  [1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
 6.12323400e-17]
sin = np.sin(a * np.pi/180) 
 inv = np.arcsin(sin)
反正弦(弧度):np.arcsin(sin) =  [0.         0.52359878 0.78539816 1.04719755 1.57079633]
角度:np.degrees(inv)  [ 0. 30. 45. 60. 90.]

舍入函数

    # numpy.around(a,decimals) 函数返回指定数字的四舍五入值。
    # a: 数组
    # decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置
    a = np.array([1.0, 5.55, 123, 0.567, 25.532])
    print("原始 a = ", a)
    print("np.around(a, decimals=1) = ", np.around(a, decimals=1))
    print("np.around(a, decimals=-1) = ", np.around(a, decimals=-1))

    # numpy.floor() 返回小于或者等于指定表达式的最大整数,即向下取整。
    # numpy.ceil() 返回大于或者等于指定表达式的最小整数,即向上取整。
    a = np.array([-1.7, 1.5, -0.2, 0.6, 10])
    print('提供的数组:', a)
    print('np.floor(a) = ', np.floor(a))
    print("np.ceil(a) = ", np.ceil(a))
输出结果:
原始 a =  [  1.      5.55  123.      0.567  25.532]
np.around(a, decimals=1) =  [  1.    5.6 123.    0.6  25.5]
np.around(a, decimals=-1) =  [  0.  10. 120.   0.  30.]
提供的数组: [-1.7  1.5 -0.2  0.6 10. ]
np.floor(a) =  [-2.  1. -1.  0. 10.]
np.ceil(a) =  [-1.  2. -0.  1. 10.]
a = np.arange(9, dtype=np.float_).reshape(3, 3)
b = np.array([10., 5., 1.])

算术函数

    # 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide()。
    a = np.arange(9, dtype=np.float_).reshape(3, 3)
    b = np.array([10., 5., 1.])
    print("a = np.arange(9, dtype=np.float_).reshape(3, 3)")
    print("b = np.array([10., 5., 1.])")
    print("a = ", a)
    print("np.add(a, b) = ", np.add(a, b))
    print("np.subtract(a, b) =", np.subtract(a, b))
    print("np.multiply(a, b) = ", np.multiply(a, b))
    print("np.divide(a, b) = ", np.divide(a, b))

    # numpy.reciprocal() 函数返回参数逐元素的倒数。如 1/4 倒数为 4/1。
    # numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂
    print("np.reciprocal(b) = ", np.reciprocal(b))
    a = np.array([10, 100, 1000])
    print("a = np.array([10,100,1000])")
    print("np.power(a, 2) = ", np.power(a, 2))

    # numpy.mod()/numpy.remainder()  计算输入数组中相应元素的相除后的余数
    a = np.array([10, 20, 30])
    b = np.array([3, 5, 7])
    print("np.mod(a, b) = ", np.mod(a, b))
    print("np.remainder(a, b) = ", np.remainder(a, b))
输出结果:
a = np.arange(9, dtype=np.float_).reshape(3, 3)
b = np.array([10., 5., 1.])
a =  [[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]
np.add(a, b) =  [[10.  6.  3.]
 [13.  9.  6.]
 [16. 12.  9.]]
np.subtract(a, b) = [[-10.  -4.   1.]
 [ -7.  -1.   4.]
 [ -4.   2.   7.]]
np.multiply(a, b) =  [[ 0.  5.  2.]
 [30. 20.  5.]
 [60. 35.  8.]]
np.divide(a, b) =  [[0.  0.2 2. ]
 [0.3 0.8 5. ]
 [0.6 1.4 8. ]]
np.reciprocal(b) =  [0.1 0.2 1. ]
a = np.array([10,100,1000])
np.power(a, 2) =  [    100   10000 1000000]
np.mod(a, b) =  [1 0 2]
np.remainder(a, b) =  [1 0 2]

numpy index slicing 数组的切片和索引 numpy数组初恋

之前numpy 数组创建的文章中我们介绍了数组的创建入门,本篇我们旨在简单介绍数组的基本操作–定向定点的取值,ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。

ndarray 数组可以基于 0 – n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

基本索引

    # 一维数组切片
    a = np.arange(10)
    s = slice(2, 7, 2)  # 从索引 2 开始到索引 7 停止,间隔为2
    print("a = ", a)
    print("s = slice(2, 7, 2) # 从索引 2 开始到索引 7 停止,间隔为2")
    print("a[s] = ", a[s])
    print("a[2:7:2] = ", a[2:7:2])
    print("a[2:7] = ", a[2:7])
    print("a[2:] = ", a[2:] )
    print("a[2] = ", a[2])
a =  [0 1 2 3 4 5 6 7 8 9]
s = slice(2, 7, 2) # 从索引 2 开始到索引 7 停止,间隔为2
a[s] =  [2 4 6]
a[2:7:2] =  [2 4 6]
a[2:7] =  [2 3 4 5 6]
a[2:] =  [2 3 4 5 6 7 8 9]
a[2] =  2
    # 多维数组
    a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
    print("a = ", a)
    print("a[::-1] = ", a[::-1])
    print("a[:, ::-1] = ", a[:, ::-1])
    print("a[...,1] = ", a[..., 1])
    print("a[1,...] = ", a[1, ...])
    print("a[...,1:] = ", a[..., 1:])
a =  [[1 2 3]
 [3 4 5]
 [4 5 6]]
a[::-1] =  [[4 5 6]
 [3 4 5]
 [1 2 3]]
a[:, ::-1] =  [[3 2 1]
 [5 4 3]
 [6 5 4]]
a[...,1] =  [2 4 5]
a[1,...] =  [3 4 5]
a[...,1:] =  [[2 3]

花里胡哨索引

    # 数组索引
    print("a[[0, 1, 2], [0, 1, 0]] =", a[[0, 1, 2], [0, 1, 0]])
    x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
    print('我们的数组是x:', x)
    rows = np.array([[0, 0], [3, 3]])
    cols = np.array([[0, 2], [0, 2]])
    print("x[rows, cols] = ", x[rows, cols])
    # 布尔索引
    print("x[x > 3] = ", x[x> 3])
a[[0, 1, 2], [0, 1, 0]] = [1 4 4]
我们的数组是x: [[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
x[rows, cols] =  [[ 0  2]
 [ 9 11]]
x[x > 3] =  [ 4  5  6  7  8  9 10 11]

numpy array create 创建数组 开始步入 numpy数组的世界

numpy array create: 学习numpy的创建数组是对这个python工具包学习必不可少的入门步骤,之前–a few years ago的文章(numpy 数组属性 区别于 python list 清仓大甩卖)中我们已经对numpy array的属性做了入门级的介绍,本篇我们又要对create numpy array做入门级的介绍了。

我们会用到的函数方法做入门级的介绍,同时会做一些基础级的注意事项说明。

1. 基础创建函数

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
名称描述
object数组或嵌套的数列
dtype数组元素的数据类型,可选
copy对象是否需要复制,可选
order创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok默认返回一个与基类类型一致的数组
ndmin指定生成数组的最小维度
array 参数说明
    # 1、基本创建方式
    a = np.array([3, 4, 5])
    print('a=', a)
    # 2、显式指定纬度
    b = np.array([3, 4, 5], ndmin=1)
    print('b=', b)
    c = np.array([3, 4, 5], ndmin=4)
    print('c=', c)
    # 3、隐式多维度
    d = np.array([[3, 4, 5], [6, 7, 8]])
    print('d=', d)
    # 4、显式多维度
    e = np.array([[3, 4, 5], [6, 7, 8]], ndmin=3)
    print('e=', e)
a= [3 4 5]
b= [3 4 5]
# ndmin的显式指定,4个纬度至少有4层中括号
c= [[[[3 4 5]]]]
d= [[3 4 5]
 [6 7 8]]
e= [[[3 4 5]
  [6 7 8]]]

2.复制、迭代器、指定范围等方式

numpy.asarray(a, dtype = None, order = None)
参数描述
a任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组
dtype数据类型,可选
order可选,有”C”和”F”两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
asarray 参数说明
numpy.fromiter(iterable, dtype, count=-1)
参数描述
iterable可迭代对象
dtype返回数组的数据类型
count读取的数据数量,默认为-1,读取所有数据
fromiter 参数说明

numpy.arange(start, stop, step, dtype)
参数描述
start起始值,默认为0
stop终止值(不包含)
step步长,默认为1
dtype返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。
arange参数说明
    # 5、通过复制已有数组来创建数组
    f = np.asarray(e, dtype=float)
    print('copy array = ', f)
    # 6、通过传入一个迭代器创建数组
    g = np.fromiter(iter(range(6)), dtype=float)
    print('fromiter = ', g)

    # 7、指定起始范围及步长的方式, 可正序可倒序
    h = np.arange(2, 10, 1.5, dtype=float)
    print('arange = ', h)
    h = np.arange(20, 10, -1.5, dtype=float)
    print('arange = ', h)
copy array =  [[[3. 4. 5.]
  [6. 7. 8.]]]
fromiter =  [0. 1. 2. 3. 4. 5.]
arange =  [2.  3.5 5.  6.5 8.  9.5]
arange =  [20.  18.5 17.  15.5 14.  12.5 11. ]

3.一些特殊的数组

numpy.empty(shape, dtype = float, order = 'C')
参数描述
shape数组形状
dtype数据类型,可选
order有”C”和”F”两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
empty参数说明
numpy.zeros(shape, dtype = float, order = 'C')
参数描述
shape数组形状
dtype数据类型,可选
order‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组
zeros参数说明
numpy.ones(shape, dtype = None, order = 'C')
参数描述
shape数组形状
dtype数据类型,可选
order‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组
ones 参数说明
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数描述
start序列的起始值
stop序列的终止值,如果endpointtrue,该值包含于数列中
num要生成的等步长的样本数量,默认为50
endpoint该值为 true 时,数列中包含stop值,反之不包含,默认是True。
retstep如果为 True 时,生成的数组中会显示间距,反之不显示。
dtypendarray 的数据类型
linspace等差数列一维数组
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
参数描述
start序列的起始值为:base ** start
stop序列的终止值为:base ** stop。如果endpointtrue,该值包含于数列中
num要生成的等步长的样本数量,默认为50
endpoint该值为 true 时,数列中中包含stop值,反之不包含,默认是True。
base对数 log 的底数。
dtypendarray 的数据类型
logspace等比数列一维数组
 # 8、指定形状创建数组
    # 1.空数组
    a = np.empty((3, 3), dtype=float)
    print('empty=', a)
    # 2.元素全是0的数组
    b = np.zeros((3, 3), dtype=int)
    print('zeros=', b)
    # 3.元素全是1的数组
    c = np.ones((2, 3), order='F')
    print('ones=', c)
    # 4.等差数列的一维数组
    d = np.linspace(1, 15, 5, False)
    print('不要尾值,等差 d= ', d)
    d = np.linspace(1, 15, 5, True)
    print('保留尾值,等差 d= ', d)
    # 5.创建等比数列的一维数组
    e = np.logspace(1, 2, 4, base=2.0)
    print('e= ', e)
    e = np.logspace(0, 2, 4)
    print('e= ', e)
empty= [[0.00e+000 0.00e+000 0.00e+000]
 [0.00e+000 0.00e+000 1.86e-321]
 [0.00e+000 0.00e+000 0.00e+000]]
zeros= [[0 0 0]
 [0 0 0]
 [0 0 0]]
ones= [[1. 1. 1.]
 [1. 1. 1.]]
不要尾值,等差 d=  [ 1.   3.8  6.6  9.4 12.2]
保留尾值,等差 d=  [ 1.   4.5  8.  11.5 15. ]
e=  [2.        2.5198421 3.1748021 4.       ]
e=  [  1.           4.64158883  21.5443469  100.        ]