[Python] 常用模块(4):NumPy 下

Python 常用模块系列:

  • [Python] 常用模块(1):内建模块 – random & datetime
  • [Python] 常用模块(2):内建模块 – re 以及正则表达式
  • [Python] 常用模块(3):内建模块 – math & itertools
  • [Python] 常用模块(4):NumPy 上
  • [Python] 常用模块(4):NumPy 中
  • [Python] 常用模块(4):NumPy 下(本文)
  • [Python] 常用模块(5):pandas 1
  • [Python] 常用模块(5):pandas 2
  • [Python] 常用模块(5):pandas 3
  • [Python] 常用模块(5):pandas 4
  • [Python] 常用模块(5):pandas 5
  • [Python] 常用模块(5):pandas 6
  • [Python] 常用模块(5):pandas 7
  • [Python] 常用模块(5):pandas 8
  • [Python] 常用模块(5):pandas 9


本篇介绍对数组的操纵。

数组的变形

ndarray.reshape(shape)

将数组变形。

>>> a = np.arange(6)
>>> a
array([0, 1, 2, 3, 4, 5])
>>> a.reshape(2, 3)
array([[0, 1, 2],
       [3, 4, 5]])
np.ravel(a) 和 ndarray.flatten()

打平一个多维数组。这两个命令其实是有区别的(不只是函数和方法的区别),这里就不深究了。

>>> a = np.array([[1,2], [3,4]])
>>> np.ravel(a)
array([1, 2, 3, 4])
>>> a.flatten()
array([1, 2, 3, 4])

数组的合并

np.concatenate(*array, axis = 0)

以轴合并多个数组。若轴为 None,则合并以前先将数组打平。

>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
       [3, 4, 6]])
>>> np.concatenate((a, b), axis=None)
array([1, 2, 3, 4, 5, 6])
np.hstack(tuple),np.vstack(tuple),np.dstack(tuple)

将数组以水平、垂直或深度的序列合并。(老宅知道轴很让人费解,以后会专门讨论)

>>> a = np.array((1,2,3))
>>> b = np.array((2,3,4))
>>> np.hstack((a,b))
array([1, 2, 3, 2, 3, 4])
>>> np.vstack((a,b))
array([[1, 2, 3],
       [2, 3, 4]])
>>> np.dstack((a,b))
array([[[1, 2],
        [2, 3],
        [3, 4]]])

数组的拆分

np.split(array, ind_or_sec, axis = 0)

以轴拆分数组。若 ind_or_sec 为一个整数,则将数组分成若干等分;若为一个列表,则以列表中元素为索引进行拆分;若索引超过了数组的维度,返回一个空数组。例子:以 [2, 3] 拆分,则以 [:2][2:3][3:] 对数组进行拆分。

>>> x = np.arange(9.0)
>>> np.split(x, 3)
[array([ 0.,  1.,  2.]), array([ 3.,  4.,  5.]), array([ 6.,  7.,  8.])]
>>> x = np.arange(8.0)
>>> np.split(x, [3, 5, 6, 10])
[array([ 0.,  1.,  2.]),
 array([ 3.,  4.]),
 array([ 5.]),
 array([ 6.,  7.]),
 array([], dtype=float64)]
np.hsplit(array, ind_or_sec),np.vsplit(array, ind_or_sec(array, ind_or_sec),np.dsplit(array, ind_or_sec)

np.hstacknp.vstacknp.dstack 的操作视角一致,与 np.split 的前两个参数一致。

>>> x = np.arange(8.0).reshape(2, 2, 2)
>>> x
array([[[ 0.,  1.],
        [ 2.,  3.]],
       [[ 4.,  5.],
        [ 6.,  7.]]])
>>> np.hsplit(x, 2)
[array([[[ 0.,  1.]],
       [[ 4.,  5.]]]),
 array([[[ 2.,  3.]],
       [[ 6.,  7.]]])]
>>> np.vsplit(x, 2)
[array([[[ 0.,  1.],
        [ 2.,  3.]]]),
 array([[[ 4.,  5.],
        [ 6.,  7.]]])]
>>> np.dsplit(x, 2)
[array([[[0.],
         [2.]],
 
        [[4.],
         [6.]]]), array([[[1.],
         [3.]],
 
        [[5.],
         [7.]]])]

数组的重复和拼贴

np.tile(a, reps)

将数组 a 以拼贴整个数组的形式复制 reps 遍。

>>> a = np.array([0, 1, 2])
>>> np.tile(a, 2)
array([0, 1, 2, 0, 1, 2])
>>> np.tile(a, (2, 2))
array([[0, 1, 2, 0, 1, 2],
       [0, 1, 2, 0, 1, 2]])
>>> np.tile(a, (2, 1, 2))
array([[[0, 1, 2, 0, 1, 2]],
       [[0, 1, 2, 0, 1, 2]]]) # 仔细观察新数组的维度
np.repeat(a, reps, axis = None)

将数组 a 以重复 a 内元素的方式复制 reps 遍。若未指定轴,则复制前先将数组打平。

>>> np.repeat(3, 4)
array([3, 3, 3, 3])
>>> x = np.array([[1,2],[3,4]])
>>> np.repeat(x, 2)
array([1, 1, 2, 2, 3, 3, 4, 4])
>>> np.repeat(x, 3, axis=1)
array([[1, 1, 1, 2, 2, 2],
       [3, 3, 3, 4, 4, 4]])
>>> np.repeat(x, [1, 2], axis=0)
array([[1, 2],
       [3, 4],
       [3, 4]])

添加和删除数组内的元素

np.delete(array, obj, axis = None)

按照 object(可以是整数或表示索引的列表)删除指定元素。若轴未指定,则先将数组打平。

>>> arr = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
>>> arr
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
>>> np.delete(arr, 1, 0)
array([[ 1,  2,  3,  4],
       [ 9, 10, 11, 12]])
>>> np.delete(arr, [1,3,5], None)
array([ 1,  3,  5,  7,  8,  9, 10, 11, 12])
np.insert(arr, obj, values, axis = None)

在指定位置插入元素。若轴未指定,则先将数组打平。

>>> a = np.array([[1, 1], [2, 2], [3, 3]])
>>> a
array([[1, 1],
       [2, 2],
       [3, 3]])
>>> np.insert(a, 1, 5)
array([1, 5, 1, 2, 2, 3, 3])
>>> np.insert(a, 1, 5, axis=1)
array([[1, 5, 1],
       [2, 5, 2],
       [3, 5, 3]])
np.append(arr, values, axis = None)

在数组结尾添加元素。若轴未指定,则先将数组打平。

>>> np.append([1, 2, 3], [[4, 5, 6], [7, 8, 9]])
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.append([[1, 2, 3], [4, 5, 6]], [[7, 8, 9]], axis=0)
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值