一、基础操作
1.支持加减乘除乘方和比较运算
import numpy as np
a = np.array([20, 30, 40, 50])
b = np.array([2, 3, 4, 5])
c = a + b #加法运算
d = a - b #减法运算
e = a * b #乘法运算
f = a / b #除法运算
g = b**2 #乘方运算
h = a > 35 #比较运算
print(c)
print(d)
print(e)
print(f)
print(g)
print(h)
得到:
[22 33 44 55]
[18 27 36 45]
[ 40 90 160 250]
[10. 10. 10. 10.]
[ 4 9 16 25]
[False False True True]
2.矩阵运算
与许多其他的矩阵语言不同,numpy中 * 符号表示矩阵中的元素对应相乘,@才是代表矩阵运算符
import numpy as np
a = np.array([[1, 1], [0, 1]])
b = np.array([[2, 0], [3, 4]])
print(a*b)
print(a@b)
得到:
[[2 0]
[0 4]]
[[5 4]
[3 4]]
3.某些操作(+=,-=,*=)会直接改变被操作的矩阵数组而不会再创建新的矩阵数组
import numpy as np
a = np.ones((3, 3), dtype=int) #限定了a为整数类型的数组
b = np.random.random((3, 3))
print(a)
print(b)
b += a
print(b)
得到:
[[1 1 1]
[1 1 1]
[1 1 1]]
[[0.48554323 0.49411207 0.06774223]
[0.8745072 0.31606328 0.86847432]
[0.41653477 0.35033241 0.12665751]]
[[1.48554323 1.49411207 1.06774223]
[1.8745072 1.31606328 1.86847432]
[1.41653477 1.35033241 1.12665751]]
注意:上述操作中b+=a是可以的,但对于a+=b的操作是会报错的,因为a数组的类型为int类(不能用来表示float类的元素)
4.当使用不同类型的数组进行操作时,结果数组的类型对应于更一般或更精确的数组(称为向上转换的行为)。这与c语言中的不同数据类型间的运算规则类似,都是向上转换。
5.通过指定axis
参数,可以沿数组的指定轴应用操作
通常情况下,axis = 0时,进行的是列操作,axis = 1时,进行的是行操作。
import numpy as np
a = np.arange(12).reshape(3, 4)
print(a)
print(a.sum(axis=0)) #每列求和
print(a.sum(axis=1)) #每行求和
print(a.min(axis=0)) #每列的最小值
print(a.max(axis=1)) #每行的最大值
得到:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[12 15 18 21]
[ 6 22 38]
[0 1 2 3]
[ 3 7 11]
二、通函数(通用函数)
numpy给我们提供了功能类似math库中的大量通用函数如:sin(),cos(),exp(),sqrt()
import numpy as np
a = np.array([0, 1, 2])
print(a)
print(np.exp(a))
print(np.sqrt(a))
print(np.sin(a))
得到:
[0 1 2]
[1. 2.71828183 7.3890561 ]
[0. 1. 1.41421356]
[0. 0.84147098 0.90929743]
三、切片,索引,迭代
1.python最独特的功能便是切片了,numpy也不例外。对于一维数组,索引,切片,迭代这些操作与python中的序列类似。
import numpy as np
a = np.arange(10)**2
print(a[2])
print(a[2:5])
print(a[:6:2]) #索引从0开始,到6(不取),间隔为2
print(a[::-1]) #将数组倒置
for i in a:
print(i**(1/2.)) #对数组a中的元素进行迭代
得到:
4
[ 4 9 16]
[ 0 4 16]
[81 64 49 36 25 16 9 4 1 0]
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
2.对于多维数组,每个轴可以有一个索引,这些索引以逗号分隔的元组给出。
import numpy as np
def f(x, y):
return 5*x+y
a = np.fromfunction(f,(5, 5), dtype=int) #先创建一个新数组
print(a)
print(a[2, 3]) #第三行第四列的元素
print(a[0:3, 1]) #第一行到第三行且位于第二列的所有元素
print(a[:, 1]) #所有行且位于第二列的所有元素
print(a[1:3, :]) #第二行到第三行且处在所有列的元素
得到:
[[ 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]]
13
[ 1 6 11]
[ 1 6 11 16 21]
[[ 5 6 7 8 9]
[10 11 12 13 14]]
3.对于多维数组,三个点( ...
)表示产生完整索引元组所需的冒号。
例如,如果 x
是rank为5的数组(即,它具有5个轴),则:
x[1,2,...]
相当于 x[1,2,:,:,:]
x[...,3]
等效于 x[:,:,:,:,3]
x[4,...,5,:]
等效于 x[4,:,:,5,:]
4.对于多维数组,迭代是相对于第一个轴而言的
for row in a:
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]