NumPy适合处理统一的数值数组数据
简介
Python 的 list 是一个通用结构。它能包括任意类型的对象,并且是动态类型。
NumPy 的 ndarray 是静态、同质的类型,当 ndarray 对象被创建时,元素的类型就确定。 由于是静态类型,所以 ndarray 间的加、减、乘、除用 C 和 Fortran 实现才成为可能,所以运行起来就会更快。 根据官当介绍,底层代码用 C 语言和 Fortran 语言实现,实现性能无限接近 C 的处理效率。
NumPy内置向量化运算和广播机制,使用时更加简洁,会少写很多嵌套的 for 循环,因此代码的可读性大大增强。
用法
创建
import numpy as np
if __name__ == '__main__':
# 1.按数据的结构生成矩阵
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
# 2.和range用法一样,生成一维矩阵
b = np.arange(1, 7, 2)
print(b)
# 3.起始点间取n个间隔相同的点
c1 = np.linspace(1, 6, 6)
# 起始点为数组时,按axis等分,axis默认为0
c2 = np.linspace([1, 3], [4, 6], 3, axis=0)
print(c1, '\n', c2)
# 4.起始点间取n个间隔相同的点为指数,base为底数
d = np.logspace(2, 8, 4, base=3)
# 5.数组为主对角线,k为向右偏移距离
e = np.diag([1, 2, 3], k=1)
# 6.创建元素全都为0的矩阵,shape为元组
f = np.zeros((2, 3))
# 7.创建元素全都为1的矩阵,shape为元组
g = np.ones((2, 3))
# 8.创建随机浮点数矩阵
# 使用相同的seed()值,每次生成的随机数相同
np.random.seed(100)
# randint(low,high,(shape))随机生成整数矩阵
# rand创建元素为0-1的随机小数矩阵,shape为参数
i = np.random.randint(1, 10, (3, 5)) + np.random.rand(3, 5)
print(i)
矩阵级操作
import numpy as np
if __name__ == '__main__':
a = np.array([[1, 2, 3], [4, 5, 6]])
# 1.由外至内获取axis长度
print(a.shape)
# 2.将原矩阵的shape改变为参数中的值,原矩阵不变
b = a.reshape(3, 2) # 负数可用来占位
print(b)
# 3.将高维矩阵转为一维,原矩阵不变
c = a.flatten()
print(c)
# 4.按axis紧跟着复制元素
d = np.repeat(a, 2, axis=0)
print(d)
# 5.按shape复制元素,位数不足则以低维为准
e1 = np.tile(a, (2, 1))
# 位数超出,则将原数据升维
e2 = np.tile(a, (3, 2, 1))
print(e1, '\n', e2)
# 6.在np.newaxis所在位置添加一维
f = a[np.newaxis, :]
print(f.shape)
# 7.垂直方向叠加矩阵
g = np.vstack((d, e1))
print(g)
# 8.水平方向叠加矩阵
h = np.hstack((d, e1))
print(h)
# 9.逆时针90*k度旋转矩阵
i = np.rot90(a, k=1)
print(i)
元素级操作
import numpy as np
if __name__ == '__main__':
a = np.arange(4).reshape(2, 2)
# 1.对所有元素进行计算操作
b1 = a + 1
# 矩阵间对应位置的元素计算
b2 = a * a
print(b1, '\n', b2)
# 2.提取符合条件的元素
c1 = a[a > 2]
# 甚至赋值,但改变原矩阵
c2 = a.copy() # 深拷贝
c2[(c2 % 2) == 1] = -1
print(c1, '\n', c2)
# 3.切片,截取想要的部分
print(a[:, 0:1])
# 4.线性代数矩阵运算
d = np.dot(a, a)
print(d)
# 5.获取非0元素索引
e1 = np.nonzero(a)
# transpose矩阵转置,将结果转化为向量矩阵
# 如果填入参数则可调换任意维度的数据
# e1非矩阵,只能用transpose,不能用a.T
e2 = np.transpose(e1)
print(e1, '\n', e2)
# 6.获取最值索引,未指明维度时,返回buffer中最值索引
print(a.argmax(axis=0), a.argmin())
统计
import numpy as np
if __name__ == '__main__':
a = np.arange(24).reshape(2, 3, 4)
print(a)
# 1.求和,默认从所有元素中得出,也可按axis计算,下同
print(a.sum())
# 2.求最大值
print(a.max())
# 3.求最小值
print(a.min())
# 4.求平均值
print(a.mean())
# 5.求方差
print(a.var())
# 6.求标准差
print(a.std())
# 7.求迹(矩阵主对角线元素和),
print(a.trace())
文档信息
- 本文作者:Weikang Yu
- 本文链接:https://AccelYu.github.io/2020/07/19/NumPy/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)