numpy常用指令大全
最近在自学numpy,从网上找了视频来看,感觉numpy的指令很多,怕记不清所以统一贴出来方便查阅。
import numpy as np
导入numpy模块,一般简写为np
array = np.array([[1,2,3],[2,3,4]])
numpy的属性
print(array) 打印出数组
print("number of dim:",array.ndim)
判断数组是几维的(一维二维等等)
print("shape:",array.shape)
判断数组的形状
print("size:"array.size
)判断数组的大小
numpy的创建array
array = np.array([[1,2,3],[2,3,4]]
简单创建(注意下打印出来之后没有中间,号)
array = np.array([[1,2,3],dtype=np.int)
print(array.dtype)
dtype设定数组中的格式,一般有int,float等等,默认的是64位的,如果要32位的改成int32,通常来说位数越小占用空间越小,一般保留64位
a = np.zeros((5))
a = np.nes((5))
a = np.empty(([3,4]))
常见的全0全1全空数组
a=np.arange(10,20,2).reshape((3,4))
生成从10到20步长为2的整数数组(不包括20,10位置默认为0),并重新变为3行4列的数组格式
a = np.linespace(1,10,20)
生成线段,20是生成线段的份数
numpy基础运算
a=np.array([10,20,30,40])
b=np.arange(4)
生成从0到3的数组
常规的加减乘除,即+-*/都是对应位直接做计算得到结果,当运用单一矩阵乘方的时候遵循Python的规则用**,三角函数需要调用,例如c=np.sin(a).判断可以直接把条件加到括号里,如print(b<3)。二维的矩阵乘法运算(从线性代数角度来说)如下:
c_dot=np.dot(a,b)
或者
c_dot_2=a.dot(b)
随机生成一个array,每个元素都是0到1之间的随机数,需要制定形状:
a = np.random.random((2,4))
np.sum(a,axis=1)
求和,axis=1是对每一列中找,axis=0是对每一行中找,会针对每一行(列)中分别查找计算
np.min(a)
求最小值
np.max(a)
求最大值
np.argmin(a)
求最小值的索引
np.argmax(a)
求最大值的索引
np.mean(a)
求平均值
np.median(a)
求中位数
np.cumsum(a)
是一个累加的过程,逐步的加进去,显示出累加的每一步
np.diff(a)
累差,就是每个元素和之前的差
np.nonzero(a
)找出非0的数并将它们的索引列出来
np.sort(a)
排序
np,transpose(a)
矩阵反向,行列互换并且倒序
np.clip(a,3,5)
截取,a中所有小于3的让他为3,大于5的让他为5,中间的不变
numpy的索引
A=np.arange(3,15).reshape((3,4))
print(A[3])类似于python,对一维来说是直接访问对应索引,对二维来说单索引访问的是对应的行,双索引才是对应的单个元素如,print(A[2][1])
和print(A[2,1])
是一样的,print(A[2,:])
代表第二行的所有数,print(A[1,1:3])
第二行从1到3的数即8和9
for循环:
for row in A:
print(row)
迭代行
for column in A.T
(就是前面的transpose):
print(column)
迭代列
A.flatten()
变平
a.ravel() # returns the array, flattened
for item in A.flat:
print(item)
迭代项目,flat是上面的迭代器
numpy array合并
A = np.array([1,1,1])
B = np.array([2.2.2])
C = print(np.vstack((A,B)))
vertical stack上下的合并
D = print(np.hstack((A,B)))
horizontal stack 左右的合并
!--print(A[np.newaxis,:])
--给A加了一个维度。?
E = np.concatenate((A,B,B),axis=0)
多个array的合并,axis=0在上下维度进行合并
numpy array分割
A = np.arange(12).reshape((3,4))
print(np.spilt(A,2,axis=1))
将A纵向平均分成2份(注意spilt中列数必须能被2整除),axis=0是横向分割
print(np.array_spilt(A,2,axis=1))``不等量分割
print(np.vspilt(A,3))
print(np.vspilt(A,3))
同上面的合并
numpy array的复制和深度复制(copy&deep copy)
视频里讲的很简略,所以这边把官方文档转过来。
有三种情况:
#完全不复制
简单赋值不会创建数组对象或其数据的拷贝。
>>> a = np.arange(12)
>>> b = a # no new object is created
>>> b is a # a and b are two names for the same ndarray object
True
>>> b.shape = 3,4 # changes the shape of a
>>> a.shape
(3, 4)
Python将可变对象作为引用传递,所以函数调用不会复制。
>>> def f(x):
... print(id(x))
...
>>> id(a) # id is a unique identifier of an object
148293216
>>> f(a)
148293216
#视图或浅复制
不同的数组对象可以共享相同的数据。 view
方法创建一个新的数组对象,它查看相同的数据。
>>> c = a.view()
>>> c is a
False
>>> c.base is a # c is a view of the data owned by a
True
>>> c.flags.owndata
False
>>>
>>> c.shape = 2,6 # a's shape doesn't change
>>> a.shape
(3, 4)
>>> c[0,4] = 1234 # a's data changes
>>> a
array([[ 0, 1, 2, 3],
[1234, 5, 6, 7],
[ 8, 9, 10, 11]])
对数组切片返回一个视图:
>>> s = a[ : , 1:3] # spaces added for clarity; could also be written "s = a[:,1:3]"
>>> s[:] = 10 # s[:] is a view of s. Note the difference between s=10 and s[:]=10
>>> a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
深拷贝
copy
方法生成数组及其数据的完整拷贝。
>>> d = a.copy() # a new array object with new data is created
>>> d is a
False
>>> d.base is a # d doesn't share anything with a
False
>>> d[0,0] = 9999
>>> a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
#函数和方法概述
这里列出了一些根据类别排列的有用的NumPy函数和方法名称。完整列表见Routines。
-
数组创建
arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, r, zeros, zeros_like
-
转换
ndarray.astype, atleast_1d, atleast_2d, atleast_3d, mat
-
手法
array_split, column_stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, ndarray.item, newaxis, ravel, repeat, reshape, resize, squeeze, swapaxes, take, transpose, vsplit, vstack
-
问题
all, any, nonzero, where
-
顺序
argmax, argmin, argsort, max, min, ptp, searchsorted, sort
-
操作
choose, compress, cumprod, cumsum, inner, ndarray.fill, imag, prod, put, putmask, real, sum
-
基本统计
cov, mean, std, var
-
基本线性代数
cross, dot, outer, linalg.svd, vdot