考虑一个4维numpy数组(变量a),我们有一个.shape =(16,5,66,717),从包含4个元素的第二维中,我想选择第二个和第五个元素:
b = a[:, [1,4],:,:]
B.shape返回(16,2,66,717),所以我想我所做的是正确的。现在我想从第一个维度中提取4个元素(第八、第十一、第十二、第十三),从第二个维度中提取两个元素(第二和第五):
b = a[[7,10,12,13,14], [1,4],:,:]
这会产生错误:
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (5,) (2,)
我不明白为什么numpy数组中大于1维的同时索引不起作用。我想我可以依次执行B = a[:,[1,4],:,:]和c = b[[7,10,12,13,1,4],:,:,:]来得到我想要的结果,但是一定有一种方法可以一步完成。你能帮忙吗?
1条答案
按热度按时间y1aodyip1#
制作较小的3D数组:
选择两个“行”(在中间尺寸上):
如果我们使用相同形状的2个列表(或数组),我们最终会从[159]中选择2个“行”:
如果第一个列表/数组是“列向量”,我们选择(2,2)“块”:
ix_
可用于创建相同的2个数组:因此,使用
ix_
数组:当我说它们相互广播时,我的意思与在加法或乘法期间广播的意思相同:
参考:https://numpy.org/doc/stable/user/basics.indexing.html#advanced-indexing
编辑
关于您的错误:
ix_
是一个函数。在函数调用中不允许使用“:”。它只在索引中有效,在索引中它被转换为slice
。这就是为什么会出现语法错误。