以数组a为例:
import numpy as np a = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) a array([[1, 2, 3, 4], [5, 6, 7, 8]])a.ndim 返回秩 rank, 轴的数量
a.ndim 2a.shape 返回(轴, 秩)元组
a.shape (2, 4)a.size 返回轴与秩的乘积
a.size 8a.dtype 返回数组的数据类型,int32 长度为32位二进制的整数类型
a.dtype dtype('int32')a.itemsize 返回数组每一个元素的大小,以字节为单位
a.itemsize 4通过np.array()传入列表、元组、列表元组混合, dtype不指定的话会自动匹配最佳的数据类型
a = np.array([[1,2,3],(4,5,6)], dtype=np.int) a array([[1, 2, 3], [4, 5, 6]])通过np.arange(n),n是长度,下标是从0开始,类似于range()
a = np.arange(10) a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])生成一个全0的数组,形状是shape元组
a = np.zeros((3,4)) a array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]])生成一个全1的数组,形状是shape元组
a = np.ones((2,3)) a array([[1., 1., 1.], [1., 1., 1.]])生成一个全3的数组,形状是shape元组,数值可自定义
a = np.full((2,3), 3) a array([[3, 3, 3], [3, 3, 3]])生成一个5*5的正方形数组,对角线都是1,其余是0
a = np.eye(5) a array([[1., 0., 0., 0., 0.], [0., 1., 0., 0., 0.], [0., 0., 1., 0., 0.], [0., 0., 0., 1., 0.], [0., 0., 0., 0., 1.]])传入一个ndarrary对象,会仿照对象的shape来生成一个形状一致的数组
b = np.ones_like(a) b array([[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]]) b = np.zeros_like(a) b array([[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]]) b = np.full_like(a,3) b array([[3., 3., 3., 3., 3.], [3., 3., 3., 3., 3.], [3., 3., 3., 3., 3.], [3., 3., 3., 3., 3.], [3., 3., 3., 3., 3.]])给定范围生成数组 np.linspace(start, end, num, endpoint=False)
start: 起始值end: 结束值num: 想要生成多少子元素endpoint: 是否包含结束值 a = np.linspace(1, 10, 4, endpoint=False) a array([1. , 3.25, 5.5 , 7.75]) b = np.linspace(1, 10, 4) b array([ 1., 4., 7., 10.])将两个数组合并
c = np.concatenate((a,b)) c array([ 1. , 3.25, 5.5 , 7.75, 1. , 4. , 7. , 10. ])不改变a原来的数组,返回一个通过shape改变后的副本
b = a.reshape(shape) b array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]])resize与reshape一致,但会直接改变a数组
a.resize(shape) a array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]])不改变原来的数组a,返回一个折叠成一维的数组副本
b = a.flatten() b array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])将数组n个维度中两个维度进行调换
a.swapaxes(axis1,axis2)不改变原数组a,返回一个改变数据类型的副本
b = a.astype(dtype=np.float) b array([[0., 1., 2., 3., 4.], [5., 6., 7., 8., 9.]])从下标1开始,到下标5-1=4结束,步长为2
a[1:5:2] array([8, 6])第一个维度下标是1,第二个维度下标是2,第三个维度下标是3,维度之间用逗号分隔。
a[1,2,3] 23一样可以用负数索引
a[-1,-1,-1] 23取第一个维度上的全部数组,在第一个维度基础上取第二个维度下标为1的数组,在第二个维度的基础上取倒数第三个元素,组成新数组。
a[:,1,-3] array([ 5, 17]) a[:,1:3,:] array([[[ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[16, 17, 18, 19], [20, 21, 22, 23]]])第三个维度加上步长2
a[:,1:,::2] array([[[ 4, 6], [ 8, 10]], [[16, 18], [20, 22]]])数组与标量之间的运算作用与数组的每一个元素
实例:计算a与元素平均值的商 import numpy as np a = np.arange(24).reshape((2,3,4)) a array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]) a.mean() 11.5 a = a/a.mean() a array([[[0. , 0.08695652, 0.17391304, 0.26086957], [0.34782609, 0.43478261, 0.52173913, 0.60869565], [0.69565217, 0.7826087 , 0.86956522, 0.95652174]], [[1.04347826, 1.13043478, 1.2173913 , 1.30434783], [1.39130435, 1.47826087, 1.56521739, 1.65217391], [1.73913043, 1.82608696, 1.91304348, 2. ]]])对ndarray中的数据执行元素及=级运算的函数
函数说明np.abs(x) np.fabs(x)计算数组各元素的绝对值np.sqrt(x)计算数组各元素的平方根np.square(x)计算数组各元素的平方np.log(x) np.log10(x) np.log2(x)计算数组各元素的自然对数、10底对数和2底对数np.cell(x) np.floor(x)计算数组各元素的ceiling值或floor值np.rint(x)计算数组各元素的四舍五入值np.modf(x)将数组各元素的小数、整数部分以两个独立的数组返回np.cos(x) np.cosh(x)np.sin(x) np.sinh(x)计算数组各元素的普通型和双曲型三角函数np.tan(x) np.tanh(x)np.exp(x)计算数组各元素的指数值np.sign(x)计算数组各元素的符号值,1(+),0,-1(-) 一元函数实例 a = np.arange(24).reshape((2,3,4)) a array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]) b = np.square(a) b array([[[ 0, 1, 4, 9], [ 16, 25, 36, 49], [ 64, 81, 100, 121]], [[144, 169, 196, 225], [256, 289, 324, 361], [400, 441, 484, 529]]], dtype=int32) a = np.sqrt(a) a array([[[0. , 1. , 1.18920712, 1.31607401], [1.41421356, 1.49534878, 1.56508458, 1.62657656], [1.68179283, 1.73205081, 1.77827941, 1.82116029]], [[1.86120972, 1.89882892, 1.93433642, 1.96798967], [2. , 2.03054318, 2.05976714, 2.08779763], [2.11474253, 2.14069514, 2.16573677, 2.1899387 ]]]) np.modf(a) (array([[[0. , 0. , 0.18920712, 0.31607401], [0.41421356, 0.49534878, 0.56508458, 0.62657656], [0.68179283, 0.73205081, 0.77827941, 0.82116029]], [[0.86120972, 0.89882892, 0.93433642, 0.96798967], [0. , 0.03054318, 0.05976714, 0.08779763], [0.11474253, 0.14069514, 0.16573677, 0.1899387 ]]]), array([[[0., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]], [[1., 1., 1., 1.], [2., 2., 2., 2.], [2., 2., 2., 2.]]]))sep 默认为空串,所以数据以二进制形式存储
用以上方法进行存取数据,会造成数组维度的丢失,一般会再写一个文件来保存数组的维度,当数组需要从文件中获取的时候,再次读取存储维度的文件,将数组还原,一般用于大型的数组。那么有没有更加便捷的方法来存取数据呢?
打开文件可以看到,数组以二进制的方式存入文件,并且把维度以明文的方式存储,np.load()的时候就会自动解析还原数组。