Numpy小结二

这篇博客详细介绍了Numpy的数组属性,包括形状、维度、数据类型等。讨论了数组的基本操作,如索引、级联(包括水平和垂直级联)、分割和数据聚合。还深入讲解了轴转换、矩阵运算以及排序方法,包括快速排序和部分排序的功能。
摘要由CSDN通过智能技术生成
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() 级联需要注意的点:
    1. 级联的参数是列表:一定要加中括号或小括号
    2. 维度必须相同
    3. 形状相符
    4. 【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向
    5. 可通过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]
    1. 分别代表水平级联与垂直级联,填入的参数必须被小括号或中括号包裹
    2. vertical垂直的 horizontal水平的 stack层积
    3. 这两个函数的值也是一个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个最大的数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值