上次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])# i默认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 43 4 3 4]]
更多numpy的常用用法,可以参考官网查看了:https://docs.scipy.org/doc/numpy/reference/
好,下次跟大家分享scipy 的用法,这是处理图像时候常用的,比如做医学图像处理等等。