? 最近在自学numpy,从网上找了视频来看,感觉numpy的指令很多,怕记不清所以统一贴出来方便查阅。
import numpy as np
导入numpy模块,一般简写为np
array = np.array([[1,2,3],[2,3,4]])
print(array) 打印出数组
print("number of dim:",array.ndim)
判断数组是几维的(一维二维等等)
print("shape:",array.shape)
判断数组的形状
print("size:"array.size
)判断数组的大小
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是生成线段的份数
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,中间的不变
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是上面的迭代器
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在上下维度进行合并
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))
同上面的合并
视频里讲的很简略,所以这边把官方文档转过来。
有三种情况:
简单赋值不会创建数组对象或其数据的拷贝。
>>> 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
原文:https://www.cnblogs.com/crossain/p/11223000.html