ndarray 数组属性
- shap: 数组形状(3, 3, 3)
- ndim: 数组维度, shape的长度
- size: 数组的总长度
- dtype: 数据类型
- ndarray.T: 用于数组的转置, 与.transpose()相似
data = np.random.randint(0, 255, size=(5, 3, 2))
data.Ty
- ndarray.imag: 用来输出数组所包含元素的虚部
# 由于data没有虚部, 所以输出为零
data.imag
data.real: 用来输出元素的实部
data.real
- ndarray.itemsize: 用来输出一个数组元素的字节数
data.itemsize
- ndarray.nbytes: 用来输出一个数组的总字节数
data.nbytes
- ndarray.strides: 用来遍历数组时, 输出每个维度中步进的字节数组
data.strides
数组的基本操作
索引
data = np.random.randint(0, 2, size=(3, 2, 4))
data[(0, 0, 1, 2), (0, 0, 1, 3), (0, 0, 1, 2)]
# 上下颠倒
data[::-1]
# 左右颠倒
data[:,::-1]
#切片
data[0:1,:,1:3]
- ndarray.reshape: 重设形状
data.reshape(4, 6)
- ndarray.ravel: 数组展开, 即数组扁平化, 将任何数组变为1维
data.ravel()
级联
- np.concatenate() 级联需要注意的点:
- 级联的参数是列表:一定要加中括号或小括号
- 维度必须相同
- 形状相符
- 【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向
- 可通过axis参数改变级联的方向,默认为0, (0表示列相连,表示的X轴的事情,1表示行相连,Y轴的事情)
nd1 = np.random.randint(0, 150, size=(5, 4))
nd2 = np.random.randint(0, 150, size=(5, 4))
np.concatenate((nd1, nd2), axis=1) # axis默认是零
- numpy.[hstack|vstack]
- 分别代表水平级联与垂直级联,填入的参数必须被小括号或中括号包裹
- vertical垂直的 horizontal水平的 stack层积
- 这两个函数的值也是一个list|tuple
nd3 = np.hstack((nd1, nd2))
nd4 = np.vstack((nd1, nd2))
分割数组
- numpy.split(array,[index1,index2,…..],axis)
axis
默认值为0,表示水平轴,如果值为1,表示垂直的轴
'''注意: indices_or_sections -> [100, 200]列表有两个值,
第一个值代表0:100, 第二个值代,100:200,
会产生三个值, 就需要三个变量来接收'''
nd5, nd6, nd7 = np.split(data1, [100, 200], axis=0)
- ndarray.copy(): 创建副本
nd8 = nd7.copy()
数据的聚合
- ndarray.sum(): 求和
data = np.ramdom.randint(0, 255, (100, 100, 100))
# 求所有元素的和
data.sum()
# 1维中元素的和
data.sum(axis=0)
# 2维中元素的和
data.sum(axis=1)
# 3维中元素的和
data.sum(axis=2)
- ndarray.max()/min()/mean():求最大值/最小值/平均值
# 所有元素中的最大值
data.sum()
# 1维中的最大值
data.max()(axis=0)
# 2维中最大值
data.()(axis=1)
# 3维中最大值
data.max()
- 其它函数
Function Name NaN-safe Version Description
np.sum np.nansum Compute sum of elements
np.prod np.nanprod Compute product of elements
np.mean np.nanmean Compute mean of elements
np.std np.nanstd Compute standard deviation
np.var np.nanvar Compute variance
np.min np.nanmin Find minimum value
np.max np.nanmax Find maximum value
np.argmin np.nanargmin Find index of minimum value 找到最小数的下标
np.argmax np.nanargmax Find index of maximum value
np.median np.nanmedian Compute median of elements
np.percentile np.nanpercentile Compute rank-based statistics of elements
np.any N/A Evaluate whether any elements are true
np.all N/A Evaluate whether all elements are true
np.power 幂运算
np.argwhere(nd1<0)
轴转换
轴移动
moveaxis
可以将数组的轴移动到新的位置。其方法如下:numpy.moveaxis(a, source, destination) 其中: - `a`:数组。 - `source`:要移动的轴的原始位置。 - `destination`:要移动的轴的目标位置。 np.moveaxis(data, 0, 2)
- 轴交换
'''
和 `moveaxis` 不同的是,`swapaxes` 可以用来交换数组的轴。其方法如下:
numpy.swapaxes(a, axis1, axis2)
其中:
- `a`:数组。
- `axis1`:需要交换的轴 1 位置。
- `axis2`:需要与轴 1 交换位置的轴 1 位置。
'''
np.swapaxes(data, 0, 2)
- 数组转置
# axis 不为None 按照轴转换
np.transpose(data,axis=None) #同 data.T
数组循环
- tile
# tile循环依赖的是行,把每行平铺n次
np.tile(data, 3)
- repeat
# repeat可以指定维度, 维度不一样, 平铺的方式不一样
# 不指定维度, repeat会先降维再将每个元素平铺
np.repeat(data, 3)
ndarray 的矩阵操作
算术运算
- 矩阵加法
data = np.random.randint(0, 100, size=(5, 3, 4))
data + 3
- np.add求和
np.add(data, data)
- np.multiply() 乘积
np.multiply(data, data)
- np.dot 矩阵乘积
data1 = np.random.randint(0, 155, (3, 4))
data2 = np.random.randint(0, 155, (4, 7))
np.dot(data1, data2)
- 三维与一维的乘积
data3 = np.random.randint(0, 155, (5, 4, 3))
data4 = np.random.randint(0, 155, 3)
np.dot(data3, data4)
- 三维与二维的乘积
data5 = np.random.randint(0, 10, size=(5, 4, 3))
data6 = np.random.randint(0, 10, size=(3, 5))
np.dot(data5, data6)
- 广播机制
【重要】ndarray广播机制的两条规则
规则一:为缺失的维度补1
规则二:假定缺失元素用已有值填充
例1: m = np.ones((2, 3)) a = np.arange(3) 求M+a
ndarray排序
快速排序
np.sort()与ndarray.sort()都可以,但有区别:
- np.sort()不改变输入
- ndarray.sort()本地处理,不占用空间,但改变输入
部分排序
np.partition(a, k)
有的时候我们不是对全部数据感兴趣,我们可能只对最小或最大的一部分感兴趣。- 当k为正时,我们想要得到最小的k个数
- 当k为负时,我们想要得到最大的k个数
data = np.random.randint(0, 10000, size=100)
# 先排序再切片
sorted_data = np.partition(data, k=5)
min_five = sorted_data[:5]
# 当k为正数时, 取最后k个最大的数