Numpy 矩阵操作
上次numpy的第一次分享,涉及了numpy矩阵的构建,一维二维的,矩阵的size,取元素,特殊矩阵的构建,slicing操作,list的comprehension,整数索引,布尔索引,等等。今天一起来看一下numpy的第二次分析,包括,numpy矩阵元素的数据类型,元素的计算,特殊方法的构建矩阵,等等。(下面的分享参考python, scipy, 和斯坦福大学的python 教程,动图来源于网络)
在上次的学习中,我们创造了一个np.array,其中包含浮点数,而使用print (type(array))可以查看该数组的类型。
import numpy as np
a = np.zeros((1))
# 创造一个0向量,只包含一个0,用小括号,zero加s
print(a)# [0]
print(type(a),type(a[0]))
# 0 默认是64位的float类型的
b = np.array([1,2.5,3,4])
# 包含一个浮点型,默认float64 类型
c = np.array([1,2,3,4])# 默认int32
当一个矩阵中包含浮点型,那么整个数组的data type就默认是 folat 64,并且每个元素都是。
除了默认的类型之外,可以创造给定的类型,整数类型包括,int 8, 16, 32, 64, 浮点型的包含 float 16, 32, 64. 具体的更多案例,就参考官网的链接:https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html
Numpy的出现让我们操作矩阵和运算变的很方便,所以矩阵的运算就变得很重要。矩阵对于运算符号的操作是元素类的操作。
比如加法运算:就是同一个size的矩阵,对应元素的相加。减法,乘法和除法也类似。
a4 = a1 - a2
# list类型不支持 list - list 操作,也不支持除法,乘法操作。
print (a4,np.subtract(a1,a2))
# 可以利用 np.subtract
print (a1/a2,np.divide(a1,a2))
# np.devide
矩阵除了元素的运算外,其实更多的是矩阵的乘法,取均值,标准差和标准化等等一系列操作。
d = np.array([[1,2],[1,2],[1,2]])
print (b.dot(d),np.dot(b,d))
# 3*2 的矩阵和2*3的矩阵相乘,得到2*2的矩阵
# i_STEM,一维的向量相乘,
v1 = np.array([1,2,3])
v2 = np.array([1,2,3])
print (v1.dot(v2))
# 14,两个向量的相乘是一个值。
元素取和操作:
v = np.array([[1,2,3],[4,5,6]])
print (np.sum(v))# 21
print (np.sum(v,axis = 0))
# [5,7,9],每一列的和
print (np.sum(v,axis = 1))
# [6,15],每一行的和
print ((v-np.mean(v,axis = 0))/np.std(v,axis = 0))
# 按列标准化之后,新的矩阵每一列
# 均值为0,标准差是1,按列标准化是比较常用的一个操作,实际中每一行经常是一条数据,
其他操作还有转置操作等等。其他的更多操作参考:
https://docs.scipy.org/doc/numpy/reference/routines.math.html
很多有用的操作,比如给一个二维的矩阵每一行都加上一个向量,得到一个新的矩阵。
b = np.array([3,4])
bs = np.tile(b,(2,3))
# 原来1行两列,2*3的堆叠后,变成(1*2)*(2*3)的大小
# tile本身有砖块的意思,就是堆叠的引申意义
[[3 4 3 4 3 4]
[3 4 3 4 3 4]]
更多numpy的常用用法,可以参考官网查看了:
https://docs.scipy.org/doc/numpy/reference/
好,下次跟大家分享scipy 的用法,这是处理图像时候常用的,比如做医学图像处理等等。
领取专属 10元无门槛券
私享最新 技术干货