如何使用Numpy多列切片多维数组?

时间:2019-07-09 21:10:41

标签: python numpy multidimensional-array

我正在生成大小不同的多维数组,尽管它们的列数都是偶数。

>> import numpy as np
>> x = np.arange(24).reshape((3,8))

这将导致:

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]])

我能够用numpy切片并获得数组中的第一列:

>> newarr = x[0:,0:2]

array([[ 0,  1],
       [ 8,  9],
       [16, 17]])

但是,我想拥有一个数组,该数组只是第1列和第2列在一起,第3列和第4列在一起的列的列表,依此类推。例如:

array([[[ 0,  1],
       [ 8,  9],
       [16, 17]],
       [[ 2,  3],
       [10, 11],
       [18, 19]],
       etc....]
)

下面的代码可以工作,但是很笨拙,我的数组也不尽相同。有些数组有16列,有些数组有34列,有些数组有50列,等等。

>> newarr = [x[0:,0:2]]+[x[0:,2:4]]+[x[0:,4:6]]

[array([[ 0,  1],
       [ 8,  9],
       [16, 17]]), array([[ 2,  3],
       [10, 11],
       [18, 19]])]

必须有比这更好的方法

newarr = [x[0:,0:2]]+[x[0:,2:4]]+[x[0:,4:6]]+...+[x[0:,n:n+2]]

帮助!

1 个答案:

答案 0 :(得分:1)

我的想法是添加一个for loop

slice_len = 2
x_list = [x[0:, slice_len*i:slice_len*(i+1)] for i in range(x.shape[1] // slice_len)]

输出:

[array([[ 0,  1],
        [ 8,  9],
        [16, 17]]), array([[ 2,  3],
        [10, 11],
        [18, 19]]), array([[ 4,  5],
        [12, 13],
        [20, 21]]), array([[ 6,  7],
        [14, 15],
        [22, 23]])]