Numpy在科学计算上的性能远高于List,且有丰富的科学计算函数.numpy支持大量高维度数组与矩阵运算。NumPy的主要对象是多维数组 Ndarray。在NumPy中维度Dimensions叫做轴Axes,轴的个数叫做秩Rank。Ndarray对象的常用创建方式
import numpy as np x = np.empty([3, 2]) # 创建一个指定形状数据类型的未初始化的数组 x1 = np.zeros([3, 2]) # 以0填充新数组 x2 = np.ones([3, 2], dtype=int) # 以1填充新数组 x3 = np.full((2, 2), 4) # 以指定数填充数组 x4 = np.random.random((1, 3)) # 创建随机数组 x5 = np.random.randn(2, 3) # 创建标准正态分布数组 x6 = np.random.randint(10, 20, (3, 4)) # 创建随机分布的整数型数组 x7 = np.arange(10) # 从数值范围创建数组 arange(start,stop,step,dtype) x8 = np.asarray([1, 2, 3, 4]) # 从已有数组创建数组 x9 = list(range(100)) # 使用迭代器创建数组 it = iter(x9) x10 = np.fromiter(it, dtype=float) # 创建一维等差数列数组 np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) # endpoint参数为是否显示stop,默认不显示,restep参数为是否显示间隔 x11 = np.linspace(10, 20, 5, endpoint=True) # 创建一维等比数列数组 np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None) # base参数为对数log的底数,默认为10 x12 = np.logspace(0, 9, 10, base=2)
创建numpy数组时的可选参数一般包括:
- dtype:数组元素的数据类型,可选值参考NumPy 数据类型 | 菜鸟教程 (runoob.com) ,默认为float
- copy:数组对象是否需要复制,可选值True/False
- order:创建数组的样式,C为行有限,F为列优先,A为任意
- ndmin:指定生成的数组的最小维度
"""
ndarray.ndim 秩,即轴的数量或维度的数量
ndarray.shape 数组的形状,对于矩阵,n行m列
ndarray.size 数组元素的总个数,相当于 .shape中 n*m 的值
ndarray.dtype ndarray对象的元素类型
ndarray.itemsize ndarray对象中每个元素的大小,以字节为单位
ndarray.flags ndarray对象的内存信息
ndarray.real ndarray元素的实部
ndarray.imag ndarray元素的虚部
ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以
通常不需要使用这个属性。
"""
Numpy的常见操作
一.改变数组形状:
x = np.array([[1, 2, 3, 4, 5, 6]]) # 方式1 x = np.array([[1, 2, 3, 4, 5, 6]], ndim=3) # 方式2 x.reshape(2,3) # 返回一个新的数组 # 方式3 x.resize(2,3) # 原地改变形状 # 方式4 x.shape=(2,3) # 原地改变形状二.展平数组
# 方式1 x.reshape(-1) # 返回一个新的数组 # 方式2 x.ravel() # 返回一个新的数组三.数组元素求和
np.sum(x) # x中所有元素的和 np.sum(x,axis=0) # 求每一列的和,返回一维数组 np.sum(x,axis=1) # 求每一行的和,返回一维数组四.数组元素求平均值
np.mean(x) # 求所有元素的平均值 np.mean(x,axis=0) # 求每一列的平均值 np.mean(x,axis=1) # 求每一行的平均值五.数组的连接
x=[[1,2,3][4,5,6]] y=[[7,8,9][10,11,12]] np.concatenate((x,y)) # 默认按每一列连接即axis=0 np.concatenate((x,y),axis=1) # 按行连接六.数组的去重
np.unique([1,2,3,4,1,1,2,2,3,3,4,4,5,6,7,8]) # 给定数组不是一维会被强行展开成为一维七.数组的增删和改
np.append(x,[1,2,3]) # 在给定数组的末尾追加值,始终返回一维数组,可选参数axis(有此参数则两个数组维度必须相同) np.insert(x,index,value) # 在给定数组的index位置插入指定value,可选参数axis(两个数组维度必须相同) np.delete([x,[1,2]) # 返回从输入数组中删除指定子数组的新数组。与insert()函数的情况一样,如果未提供轴参数,则输入数组将展开。八.数组的线性代数操作
np.inner(np.array([1,2,3,4]), np.array([1,2,3,4])) # 两个一维数组的内积 x.dot(y.reshape(3,2)) # 矩阵乘法,第一个矩阵的列=第二个矩阵的行 x.T # 矩阵的转置方式1,返回新矩阵 x.transpose # 矩阵的转置方式2,返回新矩阵 np.linalg.inv(np.arange(4).reshape(2, 2)) # 矩阵的逆(行列相等才能求逆)九.其他操作
np.argsort(x) # 排序矩阵,返回排序索引数组
np.argsort(x,axis=0) # 沿行(默认)
np.argsort(x,axis=1) # 沿列
np.tile(x,(2,3)) # 把原数组作为一个整体变为所给的元组形状
# 迭代每个标量元素
for i in np.nditer(x):
print(x)
Ndarray数组的索引与切片
# 切片操作
x = np.arange(10)
y = np.arange(16).reshape(4, 4)
print(slice(1, 9, 2))
print(x[1:9:2])
print(x[1:])
print(x[:-1])
print(y[..., 1]) # 切片还可以包括省略号 …,来使选择元组的长度与数组的维度相同。
print(y[2:, ...]) # ,被用来分割维度
# 索引操作
a = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
print(a[1,2]) # 取某个确定值
print(a[-2:,1:3]) # 取某个范围值
a[np.arange(3),1]+=10 # 对a的某部分值进行运算
print(a > 10) # 获取数组中大于或小于某个确定值的数值
print(a[a>10])



