NumPy 数组常用操作

NumPy 数组常用操作

导入NumPy

NumPy 是外部库。所谓的外部库是指不包含在标准的Python当中。所以想要使用需要提前引入。

import numpy as np

 python当中引入一个库文件需要通过import 来引入。这里的import 可以直译为“将NumPy作为np导入”。之后NumPy的方法均可以通过np来调用。

生成NumPy 数组

要生成NumPy数组,需要使用np.array()这个api。

这个api接收的参数为python的列表,从而生成NumPy数组( numpy.ndarray  )。

import numpy as np 

x = np.array([1.0,2.0,3.0])

print(x)

'''
输出的结果:
[ 1. 2. 3.]
'''

# 可以通过type查看类型
type(x)

'''
输出结果:
<class 'numpy.ndarray'>
'''

 NumPy的算术运算

下面是NumPy数组的算术运算示例:

import numpy as np 

# numpy的算术运算 

x = np.array([1,2,3])
y = np.array([4,5,6])

print(x + y) #[5,7,9]


a = np.array([1.0,2.0,3.0])
b = np.array([4.0,5.0,6.0])

print(a + b) # [5.,7.,9.]

# 当两个数组的元素个数相同时,是可以进行运算的。但是如果元素个数不同,程序就会报错。
# "对应元素的" 翻译过来就是 element-wise 例如对应元素的乘法就是 element-wise product 

NumPy 数组除了可以进行加法运算,也可以进行其他的数学运算。

扫描二维码关注公众号,回复: 7450683 查看本文章

 NumPy 数组不仅可以进行 element-wise 运算,也可以和单一的数值(标量)组合起来进行运算。此时,需要在 NumPy 数组的各个元素和标量之间进行运算。这个功能也被称为广播。

>>> x = np.array([1.0, 2.0, 3.0])
>>> x / 2.0
array([ 0.5, 1. , 1.5])

NumPy的N维数组

NumPy 不仅可以生成一维数组(排成一列的数组),也可以生成多维数组。比如,可以生成如下的二维数组(矩阵)。

>>> A = np.array([[1, 2], [3, 4]])
>>> print(A)
[[1 2]
[3 4]]
>>> A.shape
(2, 2)
>>> A.dtype
dtype('int64')

在NumPy数组中,可以通过shape()方法查看形状,通过dtype()方法查看类型。

矩阵数组也可以进行数学运算。

>>> A = np.array([[1, 2], [3, 4]])
>>> B = np.array([[3, 0],[0, 6]]) >>> A + B array([[ 4, 2], [ 3, 10]]) >>> A * B array([[ 3, 0], [ 0, 24]])

和数组的算术运算一样,矩阵的算术运算也可以在相同形状的矩阵间以对应元素的方式进行。并且,也可以通过标量(单一数值)对矩阵进行算术运算。这也是基于广播的功能。

>>> A = np.array([[1, 2], [3, 4]])
>>> A * 10 array([[ 10, 20], [ 30, 40]])

NumPy 数组(np.array)可以生成 N 维数组,即可以生成一维数组、二维数组、三维数组等任意维数的数组。数学上将一维数组称为向量,将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统称为张量(tensor)。

广播

NumPy 中,形状不同的数组之间也可以进行运算。之前的例子中,在 2×2 的矩阵 A 和标量 10 之间进行了乘法运算。在这个过程中,标量10 被扩展成了 2 × 2 的形状,然后再与矩阵 A 进行乘法运算。这个巧妙的功能称为广播(broadcast)。

下面这个运算就是一个广播的例子。

>>> A = np.array([[1, 2], [3, 4]])
>>> B = np.array([10, 20])
>>> A * B
array([[ 10, 40],
[ 30, 80]])

在上面的运算中,一维数组 B 被“巧妙地”变成了和二位数组A 相同的形状,然后再以对应元素的方式进行运算。

综上,因为 NumPy 有广播功能,所以不同形状的数组之间也可以顺利地进行运算。

访问数组当中的元素

元素的索引从 0 开始。对各个元素的访问可按如下方式进行。

>>> X = np.array([[51, 55], [14, 19], [0, 4]])
>>> print(X)
[[51 55]
[14 19]
[ 0 4]]
>>> X[0]
# 第0行
array([51, 55])
>>> X[0][1] # (0,1)的元素55

也可以使用 for 语句访问各个元素。

>>> X = np.array([[51, 55], [14, 19], [0, 4]])
>>> for row in X: ... print(row) ... [51 55] [14 19] [0 4]

除了前面介绍的索引操作,NumPy 还可以使用数组访问各个元素。

>>> X = X.flatten()#将X转换为一维数组
>>> print(X)
[51 55 14 19 0 4]
>>> X[np.array([0, 2, 4])] # 获取索引为0、2、4的元素
array([51, 14, 0])

通过上述的这种标记方式,可以获取满足一定条件的元素。例如,要获取大于15的元素,可以写成下面的格式。

import numpy as np  

a = np.array([[11,22,33],[44,55,66],[77,88,99]])


b = a.flatten() # 将张量转换为一维数组
print(b) # [11 22 33 44 55 66 77 88 99]

# 通过数组获取一维数组元素 
# print(b[np.array([1,3,5,7])])  # [22 44 66 88]

print(b > 15)  # [False  True  True  True  True  True  True  True  True]

print(b[b > 15])  # [22 33 44 55 66 77 88 99]

猜你喜欢

转载自www.cnblogs.com/qfxz/p/11654628.html