import numpy as np
自定义的数组名 = np.array(任何有数组性质的对象)
例如,
x = np.array((1.0, True, 4, 'Hello World'))
但是要注意,numpy数组中只能存在一种类型的元素。在jupyter notebook中运行上述代码,将产生结果:
array(['1.0', 'True', '4', 'Hello World'], dtype='
可见,元素都被转换成了字符串类型。
用嵌套列表生成矩阵,即元素是np.ndarray的ndarray:
A = np.array([[1, 2], [3, 4]])
A.shape和A.dtype是上述矩阵的两个属性,分别存储了该矩阵的形状和数据类型的信息。
将集合、字典、单元素传入np.array()很可能会事与愿违。例如,传入集合,假设我们期待的结果是集合中的元素按遍历顺序加入np.array中:
np.array({i for i in range(5)}) # 使用了python特性,列表推导
会产生结果:
array({0, 1, 2, 3, 4}, dtype=object)
这是一个单元素数组,元素类型为object。
补救的办法是,先将集合中的元素放入列表中,再用列表构建numpy数组:
np.array(list({i for i in range(5)}))
这次的结果是:
array([0, 1, 2, 3, 4])
将字典、单元素传入np.array()也会产生类似的结果,即生成一个只有一个object类型的元素的numpy数组。
两个同样大小的矩阵之间的加减乘除都是对应元素之间的加减乘除。
示意图:
需要注意的是,矩阵乘以向量时,要使广播顺利进行,向量的长度必须和矩阵行向量的长度相等。向量的长度和矩阵的列向量的长度相等时,广播并不能顺利进行。比如,下面的代码:
def arrayBroadcastExpriment():
A = np.array([[1, 1, 1], [1, 1, 1]])
print(A)
b = np.array((2, 2))
print(b)
print(A * b)
将产生错误。错误提示为:
ValueError: operands could not be broadcast together with shapes (2,3) (2,)
和C语言数组类似,下标从0开始。
例如,
X = np.array([i for i in range(-3, 4)])
print("X =", X)
M = [i for i in range(0, 7, 2)]
Y = X[M]
print("Y =", Y)
将输出,
X = [-3 -2 -1 0 1 2 3]
Y = [-3 -1 1 3]
其中,M = [0, 2, 4, 6],即Y中的元素分别取自X的0, 2, 4, 6号元素。
例如,
X = np.array([i for i in range(-3, 4)])
print(X)
Y = X > 0
print(Y)
print(X[Y])
输出,
[-3 -2 -1 0 1 2 3]
[False False False False True True True]
[1 2 3]
非常清晰的画图功能,
import numpy as np
import matplotlib.pyplot as plt
def sinDraw():
x = np.arange(0, 6, .1)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label='sin')
plt.plot(x, y2, linestyle='--', label='cos')
plt.xlabel('x')
plt.ylabel('y')
plt.title('sin & cos')
plt.legend()
plt.show()
if __name__ == '__main__':
sinDraw()
结果如下,
很标准,很漂亮的曲线。
显示一张保存在本地磁盘D中的图片,
import matplotlib.pyplot as plt
from matplotlib.image import imread
if __name__ == '__main__':
img = imread('D:\\img.png')
plt.imshow(img)
plt.show()
结果,
简单地介绍了numpy, matplotlib的使用。