python3 Numpy 基础(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38125866/article/details/82669049

基本操作

  • 数组上运算符应用于元素。
In [58]: a = np.array([2,3,4,5])

In [59]: b = np.arange(4)

In [60]: b
Out[60]: array([0, 1, 2, 3])

In [61]: c = a - b

In [62]: c
Out[62]: array([2, 2, 2, 2])

In [63]: b**2
Out[63]: array([0, 1, 4, 9])

In [64]: 10*np.sin(a)
Out[64]: array([ 9.09297427,  1.41120008, -7.56802495, -9.58924275])
  • 矩阵乘积可以用@符号或dot函数或方法操作

In [65]: A = np.array([[1,1]])

In [66]: A = np.array([[1,1],[0,1]])

In [67]: B = np.array([[2,0],[3,4]])

In [68]: A * B
Out[68]: 
array([[2, 0],
       [0, 4]])

In [69]: A @ B
Out[69]: 
array([[5, 4],
       [3, 4]])

In [70]: A.dot(B)
Out[70]: 
array([[5, 4],
       [3, 4]])
  • 某些操作(例如+=和)*=可以修改现有阵列而不是创建新阵列。
In [71]: a = np.ones((2,3),dtype=int)

In [72]: b = np.random.random((2,3))

In [73]: a *= 3

In [74]: a
Out[74]: 
array([[3, 3, 3],
       [3, 3, 3]])

In [75]: b += a

In [76]: b
Out[76]: 
array([[3.88142533, 3.59120789, 3.41290999],
       [3.99371345, 3.62288708, 3.99741427]])
  • 当使用不同类型的数组进行操作时,结果数组的类型向上转换。
In [77]: a = np.ones(3,dtype=np.int32)

In [78]: b = np.linspace(0,pi,3)

In [79]: b.dtype.name
Out[79]: 'float64'
  • 许多一元操作,例如计算数组中所有元素的总和,都是作为ndarray类的方法实现的。
In [84]: a = np.random.random((2,3))

In [85]: a.sum()
Out[85]: 3.0263118597596907

In [86]: a.min()
Out[86]: 0.2019686910271471

In [87]: a.max()
Out[87]: 0.9452686756945003

##通过指定axis 参数,可以沿数组的指定轴应用操作:
In [88]: a.min(axis=1)
Out[88]: array([0.33502604, 0.20196869])

In [89]: a.min(axis=0)
Out[89]: array([0.20196869, 0.23183276, 0.38940528])
  • NumPy提供熟悉的数学函数,例如sin,cos和exp。在NumPy中,这些被称为“通用函数”(ufunc)
In [90]: B = np.arange(3)

In [91]: B
Out[91]: array([0, 1, 2])

In [92]: np.exp(B)
Out[92]: array([1.        , 2.71828183, 7.3890561 ])

In [93]: np.sqrt(B)
Out[93]: array([0.        , 1.        , 1.41421356])

In [94]: np.add(B,[1,2,3])
Out[94]: array([1, 3, 5])

切片迭代索引

  • 一维数组可以被索引,切片和迭代,就像 列表 和其他Python序列一样,不做阐述。
  • 多维数组每个轴可以有一个索引。这些索引以逗号​​分隔的元组给出:

In [96]: def f(x,y):
    ...:     return 10*x+y
    ...: 
    ...: 

In [97]: b = np.fromfunction(f,(5,4),dtype=int)

In [98]: b
Out[98]: 
array([[ 0,  1,  2,  3],
       [10, 11, 12, 13],
       [20, 21, 22, 23],
       [30, 31, 32, 33],
       [40, 41, 42, 43]])

In [99]: b[2,3]
Out[99]: 23

In [100]: b[0:5,1]
Out[100]: array([ 1, 11, 21, 31, 41])

In [101]: b[:,1]
Out[101]: array([ 1, 11, 21, 31, 41])

In [102]: b[1:3,1]
Out[102]: array([11, 21])

#对多维数组进行迭代是针对第一个轴完成的:

In [105]: b = np.arange(30).reshape(5,6)

In [106]: b
Out[106]: 
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29]])

In [107]: for row in b:
     ...:     print(row)
     ...:     
[0 1 2 3 4 5]
[ 6  7  8  9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]
[24 25 26 27 28 29]

#如果想要对数组中的每个元素执行操作,可以使用flat属性 作为数组的所有元素的 迭代器:
In [108]: for element in b.flat:
     ...:     print(element)
     ...:   

0
1
2
3
4
....

猜你喜欢

转载自blog.csdn.net/weixin_38125866/article/details/82669049