1.生成 NumPy 数组
要生成 NumPy 数组,需要使用 np.array() 方法。np.array() 接收 Python 列表作为参数,生成 NumPy 数组(numpy.ndarray )。
x = np.array([1, 2, 3, 4])
y = np.array([1, 1, 1, 1])
print('x:', x, 'y', y, type(x))
print('x+y:', x + y)
print('x-y:', x - y)
x = np.zeros(shape=(2,3))
print('x:')
print(x,x.shape)
运行结果:
x: [1 2 3 4] y [1 1 1 1] <class 'numpy.ndarray'>
x+y: [2 3 4 5]
x-y: [0 1 2 3]
x:
[[0. 0. 0.]
[0. 0. 0.]] (2, 3)
2.NumPy 的 N 维数组
NumPy 不仅可以生成一维数组(排成一列的数组),也可以生成多维数组。
x = np.array([[1, 2], [3, 4]])
y = np.array([[1, 1], [1, 1]])
print('x:\n', x, type(x),x.shape,x.dtype)
print('y:\n', y, type(y),y.shape,y.dtype)
print('x+y:\n', x + y)
print('x-y:\n', x - y)
运行结果:
x:
[[1 2]
[3 4]] <class 'numpy.ndarray'> (2, 2) int32
y:
[[1 1]
[1 1]] <class 'numpy.ndarray'> (2, 2) int32
x+y:
[[2 3]
[4 5]]
x-y:
[[0 1]
[2 3]]
3.广播
NumPy 中,形状不同的数组之间也可以进行运算。之前的例子中,在 2×2 的矩阵 A 和标量 10 之间进行了乘法运算。在这个过程中,如图 1-1 所示,标量 10 被扩展成了 2 × 2 的形状,然后再与矩阵 A 进行乘法运算。这个巧妙的功能称为广播 (broadcast)。
x = np.array([[1, 2], [3, 4]])
y = np.array([10, 20])
print('x*y:\n', x * y)
运行结果:
x*y:
[[10 40]
[30 80]]
在这个运算中,如图所示,一维数组 y 被“巧妙地”变成了和二位数组 x 相同的形状,然后再以对应元素的方式进行运算。
综上,因为 NumPy 有广播功能,所以不同形状的数组之间也可以顺利地进行运算。
4.访问数据
import numpy as np
x = np.array([[51, 55],
[14, 19],
[0, 4]])
print('x[0]:', x[0])
print('x[0]:', x[0][1])
for i, row in enumerate(x):
print('{}:'.format(i), row)
x = x.flatten()
print(x)
print(x[np.array([0,2,4])])
print(x[x>15])
对 NumPy 数组使用不等号运算符等(上例中是 X > 15 ),结果会得到一个布尔型的数组。 array([ True, True, False, True, False, False], dtype=bool),上例中就是使用这个布尔型数组取出了数组的各个元素(取出 True 对应的元素)。
5.np.arange
返回一个有终点和起点的固定步长的排列,如[1,2,3,4,5],起点是1,终点是6,步长为1。 参数个数情况: np.arange()函数分为一个参数,两个参数,三个参数三种情况 1)一个参数时,参数值为终点,起点取默认值0,步长取默认值1。 2)两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。 3)三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数
x = np.arange(0,6,0.5)
print(x)
运行结果:
[0. 0.5 1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. 5.5]
|