我正在生成大小不同的多维数组,尽管它们的列数都是偶数。
>> 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]]
帮助!
答案 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]])]