除了创建和遍历数组,Numpy也提供了一系列对数组操作的支持,其中包括数组的算数运算,形状变换,数组的组合和拆分以及数组的拷贝和扩容:
一元运算, 会使数组中元素的每一个值,依次执行相应的运算,然后产生一个新的view。 结果不会影响参与操作的数组,所以一元运算符需要被赋值,否则操作就会无效。另外Python不支持++,—这样的操作。一元操作符的运算过程,类似于下图这样:
import numpy as np
# 平方的例子
a = np.arange(4)
a = a ** 2
print(a)
'''
[0 1 4 9]
'''
a = np.array([20,30,40,50])
a = a > 35
print(a)
'''
[False False True True]
'''
对于二元运算,Numpy提供两种方式。一种是元素与元素单纯的进行运算(element 方式),另一种是矩阵的计算方式, 也就是数组的矩阵乘法。 这两种方式的加减法,是一样的,区别在于乘法。具体的运算方式见下图:
import numpy as np
# 元素和元素相加/相减
a = np.array([20, 30, 40, 50])
b = np.arange(4)
c = a + b
#print(c)
'''
[20 31 42 53]
'''
c = a - b
#print(c)
'''
[20 29 38 47]
'''
# 元素直接相乘的例子
a = np.array([[1, 1], [0, 1]])
b = np.array([[2, 0], [3, 4]])
c = a * b
#print(c)
'''
[[2 0]
[0 4]]
'''
# 按矩阵的方式相乘
c = a.dot(b)
print(c)
'''
[[5 4]
[3 4]]
'''
Numpy还支持矩阵的转置操作,这是矩阵的独有操作。
import numpy as np
o = np.arange(16)
o = o.reshape(4, 4)
t = o.T
print(t)
'''
[[ 0 4 8 12]
[ 1 5 9 13]
[ 2 6 10 14]
[ 3 7 11 15]]
'''
除此之外,Numpy还提供很多内置的函数,来处理数组。这些函数有一个共同的名字 叫ufunc(Universal Funcions).
所谓的造型,就是改变数组原有的维度。 numpy支持如下几种造型的函数,主要包括ravel, reshape:
import numpy as np
o = np.arange(16)
r = np.ravel(o)
print(r)
'''
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
'''
f = np.flatten(o)
print(f)
'''
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
'''
o = o.reshape(4, 4)
t = o.T
print(t)
'''
[[ 0 4 8 12]
[ 1 5 9 13]
[ 2 6 10 14]
[ 3 7 11 15]]
'''
Numpy还提供数组的重组(stack)和拆分(split)
重组是把两个不同的数组,拼接到一起。 可以按照水平重组或者垂直重组的方式进行。 拆分的操作正好相反。如图:
import numpy as np
o = np.arange(16)
r = np.ravel(o)
#print(r)
'''
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
'''
f = np.ndarray.flatten(o)
print(f)
'''
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
'''
o = o.reshape(4, 4)
t = o.T
print(t)
'''
[[ 0 4 8 12]
[ 1 5 9 13]
[ 2 6 10 14]
[ 3 7 11 15]]
'''
a = np.array([[9, 7], [5, 2]])
b = np.array([[1, 9, 3], [5, 1, 2]])
c = np.hstack((a, b))
print(c)
'''
[[9 7 1 9 3]
[5 2 5 1 2]]
'''
b = np.array([[1, 9], [3, 5], [1, 2]])
c = np.vstack((a, b))
print(c)
'''
[[9 7]
[5 2]
[1 9]
[3 5]
[1 2]]
'''
<<< Numpy的学习笔记(三)