Numpy用于快速处理任意维度数组,支持常见数组合矩阵操作,比直接使用Python简单方便。
安装:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
使用:import numpy as np
np.arange([start,] stop[, step,], dtype=None) # 生成[start,stop)的等差数组(默认start=0,step=1,dtype=int32或float64)
np.linspace(start,stop,num=50) # 生成 [start,stop] 含num个数的等差数组,num默认为50
np.logspace(start,stop,num=50,base=10.0) # 生成 [start,stop] 含num个数的等比数组,num默认为50,base为对数log的底数
np.array(object, dtype=None) # 根据object生成多维数组(默认dtype=int32或float64)
np.random.normal(μ=0.0,θ=1.0,size) # 均值μ,标准差θ的高斯正态分布, size为int或tuple
np.random.randn(d0, d1, ..., dn) # 多维标准正态分布
np.random.rand(d0, d1, ..., dn) # 生成[0,1)的多维均匀分布
np.random.random(size) # 生成[0,1)的随机浮点数数组,size为int或tuple
np.random.randint(low, high=None, size=None, dtype=None)
# 生成[0,1)的随机整数数组,size为int或tuple
z = np.zeros(shape, dtype=None) # 0矩阵,shape:int or tuple of ints
z = np.ones(shape, dtype=None) # 1矩阵,shape:int or tuple of ints
z = np.empty(shape, dtype=None) # 无穷小矩阵,shape:int or tuple of ints(元素接近0但不是0)
e = np.eye(N, M=None, k=0, dtype=float) #二维单位矩阵,N行M列,默认M=N,k表示主对角线向上或向下移几次
bool_ # 布尔型数据类型(True 或者 False)
int_ # 默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc # 与 C 的 int 类型一样,一般是 int32 或 int 64
intp # 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8 # 字节(-128 to 127)
int16 # 整数(-32768 to 32767)
int32 # 整数(-2147483648 to 2147483647)
int64 # 整数(-9223372036854775808 to 9223372036854775807)
uint8 # 无符号整数(0 to 255)
uint16 # 无符号整数(0 to 65535)
uint32 # 无符号整数(0 to 4294967295)
uint64 # 无符号整数(0 to 18446744073709551615)
float_ # float64 类型的简写
float16 # 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32 # 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64 # 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_ # complex128 类型的简写,即 128 位复数
complex64 # 复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128 # 复数,表示双 64 位浮点数(实数部分和虚数部分)
ndim # 秩,即轴的数量或维度的数量
shape # 数组的维度,对于矩阵,n 行 m 列
size # 数组元素的总个数,相当于 .shape 中 n*m 的值
dtype # ndarray 对象的元素类型
#以下部分基本用不到
itemsize # ndarray 对象中每个元素的大小,以字节为单位
flags # ndarray 对象的内存信息
real # ndarray元素的实部
imag # ndarray 元素的虚部
data # 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。
同python
a = np.array(...)
for x in np.nditer(a):
print (x, end=", " )
print ('\n')
np.sort(a, axis=-1, kind=None)
# axis:沿着该轴排列
# kind:排序算法{'quicksort'(默认), 'mergesort', 'heapsort', 'stable'}
np.where(condition)
# 例如
x = np.arange(9.).reshape(3, 3)
y = np.where(x > 3)
print (x[y])
'''
[[0. 1. 2.]
[3. 4. 5.]
[6. 7. 8.]]
(array([1, 1, 2, 2, 2]), array([1, 2, 0, 1, 2]))
[4. 5. 6. 7. 8.]
'''
arr.reshape(n) # 重塑为 n列的一维矩阵
arr.reshape(m,n) # 重塑为 m行n列的二维矩阵
arr.reshape(m,n,l) # 重塑为 三维矩阵
arr.squeeze() # 移除所有维度为1的维度
x_new = x.flatten() # 返回一个新的一维x数组
x_new = x.ravel() # 返回x一维数组的引用
x_new = x.reshape(-1)
arr = arr[np.newaxis,:] # 给矩阵增加一个行的维度
arr = arr[:,np.newaxis] # 给矩阵增加一个列的维度
np.atleast_2d(arr) # 判断矩阵是不是至少是一个二维的,不是的话变成2维返回
a1 = np.array([...])
a2 = np.array([...])
#1.按位各元素进行加减乘除取余取整
print(a1 + a2) # 加法,按位相加;- * / ** // % 同理
print(a1** a2) # 求幂,按位求幂,a1的元素为底,a2的元素为指数
print(a1 + m) # 每个元素都加m;- * / ** // % 同理(广播机制)
a3 = a1 > 3 # 判断a1的每个元素是否大于3,返回一个bool矩阵
np.multiply(a1,a2) # 矩阵点乘,和a1 * a2一个效果
#2.矩阵的乘积
np.dot(a1,a2) 或 a1.dot(a2)
# 注意:不指定axis时最后的结果是按照数组一维后的求取结果
np.sum(arr,axis=None) # 求矩阵沿指定轴的元素之和
arr.sum(axis=None)
np.mean(arr,axis=None) # 求矩阵沿指定轴的均值
arr.mean(axis=None)
np.min(arr,axis=None) # 求矩阵沿指定轴的最小值
arr.min(axis=None)
np.max(arr,axis=None) # 求矩阵沿指定轴的最大值
arr.max(axis=None)
np.argmax(arr,axis=None) # 求矩阵沿指定轴的最大值的索引
arr.argmax(axis=None)
np.argmin(arr,axis=None) # 求矩阵沿指定轴的最小值的索引
arr.argmin(axis=None)
np.median(arr,axis=None) # 求矩阵沿指定轴的中值
np.sqrt(arr) # 矩阵各元素开方
np.square(arr) # 矩阵各元素平方
np.clip(arr,a,b) # 矩阵各元素小于a时变为a,大于b时变为b,其他不变
arr.T 或 np.transpose(arr) # 返回一个arr的转置矩阵
arr.I # 返回一个arr的逆矩阵
np.linalg.det(arr) != 0.0 # 判断arr是不是可逆矩阵,返回True或False
np.all()
np.all(score[0:2, :] > 60) # 判断前两行[0:2, :]的数据是否全大于60
np.any()
np.any(score[0:2, :] > 80) # 判断前两行[0:2, :]的数据是否有大于80
np.vstack((arr1,arr2,arr3))) # 垂直合并,列数相同
np.hstack((arr1,arr2))) # 水平合并,行数相同
np.concatenate((arr1,arr2,arr3)) # 垂直合并,列数相同
np.concatenate((arr1,arr2,arr3),axis=0) # 垂直合并,列数相同
np.concatenate((arr1,arr2,arr3),axis=1) # 水平合并,行数相同
np.split(arr,n,axis=0) # 垂直等份切割为n个矩阵,不等份报错
np.split(arr,n,axis=1) # 水平等份切割为n个矩阵,不等份报错
np.vsplit(arr,n) # 垂直等份切割为n个,不等份报错
np.hsplit(arr,n) # 水平等份切割为n个,不等份报错
np.array_split(arr,n,axis=0) # 垂直不等分切割为n个,前边分的元素多
np.array_split(arr,n,axis=1) # 水平不等分切割为n个,前边分的元素多
arr2 = arr1 # 赋值操作为浅拷贝,指向内存同一对象地址
arr2 = arr1.copy() # 深拷贝,内存地址不一样
np.genfromtxt('文件名路径',delimiter=',') #数据读取为一个二维数组;每组用逗号,隔开
#其他参数:
#skip_header=12,(跳过文件前12行数据)
#skip_footer=12,(跳过文件后12行数据)
np.loadtxt(fname, dtype=float, delimiter=',')
np.savetxt(fname, ndarray, fmt='%.18e', delimiter=",")