我目前正在寻找可以将ndarray拆分为更小的ndarray的方法。
示例:给定具有形状的ndarray(78,1440,3),我想从中提取大小(78,72,3)的较小ndarray的列表,这将是20个较小的子数组。
我尝试使用numpy.split(matrix,72,axis=1)
。
flexbox
生成长度为72的列表 并且第一个条目具有形状(78,20,3)..
为什么我无法提取我需要的尺寸?
答案 0 :(得分:1)
split
中的72是要分割成的元素数量,而不是分割尺寸的尺寸(根据轴)。
但您可以使用:
numpy.split(matrix,matrix.shape[1]//72,axis=1)
将其拆分为20个长度为72的元素(针对您的情况)。请注意,您必须确保 shape[1]
可以被72 分割,否则将会引发ValueError
。
答案 1 :(得分:0)
方法#1:您可以使用np.hsplit
完全为此任务制作 -
np.hsplit(arr,20) # creates list of 20 arrays
示例运行 -
1)输入数组:
In [52]: a = np.random.randint(0,9,(2,6,3))
In [53]: a
Out[53]:
array([[[7, 8, 8],
[7, 7, 1],
[1, 6, 4],
[6, 3, 8],
[4, 7, 4],
[0, 6, 3]],
[[0, 8, 5],
[2, 2, 8],
[6, 0, 7],
[5, 4, 6],
[4, 3, 1],
[8, 6, 6]]])
2)将轴= 1分割为3
部分,因此每个部分/子阵列的长度为(2,2,3)
形状。因此,我们将得到这3个数组的列表:
In [54]: b = np.hsplit(a,3)
3)手动验证这些部分:
In [55]: b[0]
Out[55]:
array([[[7, 8, 8],
[7, 7, 1]],
[[0, 8, 5],
[2, 2, 8]]])
In [56]: b[1]
Out[56]:
array([[[1, 6, 4],
[6, 3, 8]],
[[6, 0, 7],
[5, 4, 6]]])
In [57]: b[2]
Out[57]:
array([[[4, 7, 4],
[0, 6, 3]],
[[4, 3, 1],
[8, 6, 6]]])
方法#2:此任务的另一个工具是np.array_split
-
np.array_split(arr,20,axis=1)