Numpy ---------(四)

3.3 索引的维度变换

     

    对于数组,如果我们不考虑下标数组的情况,也就是:其下标仅仅为整数、或者切片,则有:

  • 每次下标中出现一个整数下标,则索引结果的维度降 1。该维度被吸收掉
  • 每次下标中出现一个切片下标,则该维度保持不变。 

      前面提到:多维数组的下标必须是一个长度和数组的维度 ndim 相等的元组。但是如果下标中包含None,则可以突破这一限制。每多一个None,则索引结构维度升 1 。

  • 当数组的下标元组的长度小于等于数组的维度ndim时,元组中出现的None等价于切片:
  • 当数组的下标元组的长度大于数组的维度ndim时,元组中哪里出现None,索引结果就在哪里创建一个新轴,该轴长度为 1。如c=a[0,:,None],索引结果的维度为 (3,1);而d=a[0,None,:]的索引结果维度为(1,3)。

    

4. 操作多维数组

    numpy.concatenate((a1, a2, ...), axis=0):连接多个数组。其中(a1,a2,...)为数组的序列,给出了待连接的数组,它们沿着axis指定的轴连接。

  • 所有的这些数组的形状,除了axis轴之外都相同。

     一轴方向是横向,一个为5元素,一个为4元素,

   第二个concatenate ,是纵向方向,横向元素相同,但纵向,一个为2行,一个为3行。

第三个concatenate 因为1轴尺寸不等,所以在0轴方向上不能concatenate

  • numpy.vstack(tup):等价于numpy.concatenate((a1, a2, ...), axis=0)。沿着 0 轴拼接数组

    • 沿0轴拼接(垂直拼接),增加行
  • numpy.hstack(tup):等价于numpy.concatenate((a1, a2, ...), axis=1)。沿着 1 轴拼接数组

    • 沿1轴拼接(水平拼接),增加列
  • numpy.column_stack(tup):类似于hstack,但是如果被拼接的数组是一维的,则将其形状修改为二维的(N,1)

    • 沿列方向拼接,增加列
  • numpy.c_对象的[]方法也可以用于按列连接数组。但是如果被拼接的数组是一维的,则将其形状修改为二维的(N,1)。
  • 沿列方向拼接,增加列

   

    numpy.split(ary, indices_or_sections, axis=0)用于沿着指定的轴拆分数组aryindices_or_sections指定了拆分点:

  • 如果为整数N,则表示平均拆分成N份。如果不能平均拆分,则报错
  • 如果为序列,则该序列指定了划分区间(无需指定最开始的0起点和终点)。如[1,3]指定了区间:[0,1],[1,3],[3:]
  • numpy.array_split(ary, indices_or_sections, axis=0)的作用也是类似。唯一的区别在于:当indices_or_sections为整数,且无法平均拆分时,并不报错,而是尽可能的维持平均拆分。

numpy.transpose(a, axes=None):重置轴序。如果axes=None,则默认重置为逆序的轴序(如原来的shape=(1,2,3),逆序之后为(3,2,1))。如果axes!=None,则要给出重置后的轴序。它获得的是原数组的视图。

numpy.swapaxes(a, axis1, axis2):交换指定的两个轴axis1/axis2。它获得是原数组的视图。

5. 打印数组

  1. 当打印ndarray时,numpy按照Python的嵌套list的格式打印输出,但是按照以下顺序打印:

    如: 一维的ndarray按行打印;二维的ndarray按照矩阵打印;三维的ndarray按照矩阵的list打印

    如果ndarray太大,那么numpy默认跳过中间部分的数据而只是输出四个角落的数据。

    • 最底层的axis按照从左到右的顺序输出
    • 次底层的axis按照从上到下的顺序输出
    • 其他层的axis也是按照从上到下的顺序输出,但是每个slice中间间隔一条空行
  2. 要想任何时候都打印全部数据,可以在print(array)之前设置选项numpy.set_printoptions(threshold='nan')。这样后续的打印ndarray就不会省略中间数据。

6、Nan 和无穷大

  1. numpy中,有几个特殊的数:

    • numpy.nan表示NaNNot a Number),它并不等价于numpy.inf(无穷大)。
    • numpy.inf:正无穷
    • numpy.PINF:正无穷(它就引用的是numpy.inf
    • numpy.NINF:负无穷
  2. numpy.isnan(x[,out]):返回x是否是个NaN,其中x可以是标量,可以是数组。numpy.isfinite(x[, out]):返回x是否是个有限大小的数,其中x可以是标量,可以是数组。

    numpy.isfinite(np.nan)返回False,因为NaN首先就不是一个数  。                     numpy.isposinf(x[, out]):返回x是否是个正无穷大的数,其中x可以是标量,可以是数组   numpy.isposinf(np.nan)返回False,因为NaN首先就不是一个数             numpy.isneginf(x[, out]):返回x是否是个负无穷大的数,其中x可以是标量,可以是数组numpy.isneginf(np.nan)返回False,因为NaN首先就不是一个数                             numpy.isinf(x[, out]):返回x是否是个无穷大的数,其中x可以是标量,可以是数组numpy.isinf(np.nan)返回False,因为NaN首先就不是一个数。
  3. 下列函数用于对这几个特殊的数进行转换:

     numpy.nan_to_num(x):将数组x中的下列数字替换掉,返回替换掉之后的新数组:              负无穷:替换为一个非常小的数字 。                                                                                        正无穷:替换为一个非常大的数字  。                                                                                 NaN:替换为0 。

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值