详细内容情查看numpy官方中文文档,Numpy中文文档。
实例化对象:ndarray = np.——
ndarray的常用属性:ndim(查看对象有几个轴)、shape(查看对象有几个数组,每个数组内有多少个元素)、size(查看对象内的元素个数)、dtype(查看对象内数据元素的类型)、itemsize(查看对象内数据元素的字节)
创建数组:
1> ndarray.array([ [],[],…… ]):创建数组需满足一定的格式[ [],[],…… ],在[]内填写数据,一个[]代表一个维度(轴) (如果:轴内的元素数量不匹配会报错
isibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
[4,5] ]) )
另外,在添加数据之后可以手动定义数据的类型,如dtype = int32(int64|int16),其中16、32、64决定了位宽,数值越大其分配的内存越大(dtype = complex 定义为复数形式),如果没有加次参数默认根据元素数值决定
2> ndarray.arange(a,b,c)、ndarray.linspace(a,b,d):a、b为数组的起始和末尾元素,其区别在于arange不包括最后一个元素,而linspace包括最后一个元素。c为步长,即间隔(也可理解为等差数列的公差),d为元素的数量,然后根据元素数量决定数组内的数值,其本质也是一个等差数列。
论其两者的区别两点:一是当arange的步长为小数时会出现精度失误的现象;二是默认元素数据类型arange为int、linspace为float。
Data = np.linspace(1,10,num=20) #生成一个等差数列,num=规定等差数列长度,另外包括最后一个元素
test = np.arange(1,11,0.5)
print(Data)
print(test)
print(Data.dtype)
print(test.dtype)
从arange向array转换可通过reshape方法,如np.arange(1,11,1).reshape(2,5) #2为轴(行数)、5为每一个数组内的元素个数,如果第二个参数为-1则根据第一个参数以及数据元素个数自动计算
ndarray.zeros()打印数据元素数值为0的数组,ndarray.ones()打印数据元素数值为1的数组,ndarray.emptys()打印数据元素数值随机的数组
3>打印数组(一维数组、二维数组、三维数组)
一维数组:以行显示
二维数组:以矩阵显示
三维数组:以矩数组表显示
a = np.arange(6) # 1d array
print(a)
[0 1 2 3 4 5]b = np.arange(12).reshape(4,3) # 2d array
print(b)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]c = np.arange(24).reshape(2,3,4) # 3d array
print(c)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]] #这个对于一个接触numpy不久的我也不熟呀,但套套还是知道,2是指有两个第二个[],3是指每一个第二个[]内有三个子[],4是指子[]内包含多少数据元素
4>基本操作:
a.加减乘除开方不再话下
b.矩阵相乘使用 A@B A.dot(B) B.dot(A) 矩阵相乘
c.特殊操作:+=、*=、-=、/=。切记不要使用float+(- * /)int,当使用不同类型的数组进行运算时结果数组取更精确、更一般的类型
d.一元操作:sum用法、min用法、max用法,指定参数axis可以决定对多维数组的哪一轴进行运算,0代指第一轴、1代指第二轴,以此类推。
5>索引:一维数组:a[n],n从0到最后一个元素
多维数组:索引之间用逗号相隔
如果想对数组内所有元素分别依次打印,可以使用flat方法
data = np.array([
# [ [1,2,12],[2,3,23],[3,4,34] ],
# [ [4,5,45],[5,6,56],[6,7,67] ],
# [ [7,8,78],[8,9,89],[9,0,90] ]
# ]) #三维数组,共有三个轴,每一个轴内数组又是一个三维数组,子轴内每一个数组内又包含3个元素数据
# for item in data.flat:
# print('*'*20)
# print(item)
6> 将多个数组(大于等于2)折叠成为一个数组以及将一个数组拆分为多个数组。
多个数组折叠为一个数组:
方法有三个:vstack(array_A,array_B) 、hstack(array_A,array_B)、colum_stack(array_A,array_B)array_A,array_B为不同的两个数组。
vstack将两个乃至多个数组折叠在同一个维度内。
hstack将同轴的数据元素相匹配,比如两个二维数组A、B,A和B中第一轴之间相折叠,第二轴之间相折叠
一个数组拆分为多个数组:
方法有三个:vsplit(array,N),hsplit(array,n)
hsplit将数组内的每一个轴内的数据元素个数按照N份拆分,如果数组是二维数组则拆分后依旧是二维数组,仅每个轴内的数据元素数量减少
vsplit将数组内的轴进行拆分,即若数组为N维数组,则可拆分的范围在[1,N-1]。如果N/n不为整数或超出范围则会报错:ValueError: array split does not result in an equal division
7>拷贝和视图
如果要将一个数组内的数据元素全部复制到另一个数组,浅拷贝由.view()方法解决,深拷贝由.copy()解决。浅、深拷贝的区别在于拷贝后的数组内的数据元素改变数值浅拷贝中原来数组相应的值同样会发生改变,但深拷贝则不会。而不完全复制与浅拷贝的唯一区别在于id()在浅拷贝中原来数组与拷贝后的数组不同,不完全复制则相同。
8>布尔数组进行索引(浅谈),