按最终维度过滤NumPy数组,仅折叠倒数第二个维度

时间:2019-09-12 00:58:36

标签: python numpy

即使这个问题非常简单,我还是非常困惑地与这个问题作斗争:

我有一个numpy数组a,其中a.shape == (16,4,1000,60)

我真的不喜欢a[:,:,:,5] == x

我想删除所有上述内容,以生成b,其中b.shape == (16,4,k,60),其中k是未知但恒定的数字。

a[0,0,:,5] == x所在的索引不一定与a[0,1,:,5] == x所在的索引相同,但始终有k个索引。

有什么想法吗?谢谢!

编辑: 我刚刚发现,如果这样做:

b = a[a[:,:,:,5] == x]
k = b.size / (16*4*60)
b = b.reshape([16,4,k,60])
b.shape # e.g. (16,4,3,60)

它可以工作,但这似乎不是一个很好的解决方案。有没有办法明确保留尺寸?

1 个答案:

答案 0 :(得分:0)

执行b = b.reshape([16,4,k,60])而不是b = b.reshape((16,4,-1,60))numpy会为您找出隐含的维度。

一个且仅一个形状尺寸可以为-1。在这种情况下,该值是根据数组的总大小和其他维度来推断的。