【发布时间】:2012-02-20 01:43:50
【问题描述】:
我有一个约 286 x 181 x 360 的 numpy 数组(我们称之为 test),需要从中提取一个 3-D 数组。三个维度所需的范围被定义为其他 numpy 数组(a_dim、b_dim 和 c_dim)(最终基于用户输入)。天真地,我曾希望我能够做一些类似 big_array[a_dim,b_dim,c_dim] 的事情。当 b_dim 和 c_dim 只包含一个值(这恰好发生在我的主要测试用例中)时,它运行得很好,但当它们大于 1 时就不起作用。
Traceback (most recent call last):
File "<pyshell#541>", line 1, in <module>
test[a_dim,b_dim,c_dim]
ValueError: shape mismatch: objects cannot be broadcast to a single shape
为了简化,给定以下4个数组:
test=arange(125).reshape((5,5,5))
a_dim=[0,1]
b_dim=[1,2]
c_dim=[2,3]
我想从上述组合中得到的输出是:
array([[[ 7, 8],
[12, 13]],
[[32, 33],
[37, 38]]])
或者,一个 3D 数组,其中包含在 a_dim、b_dim 和 c_dim 中定义的所有行、列和波段(或任何您想称为第三维的内容)。我已经尝试为此使用 ix_ ,但显然在我看到的示例中遗漏了一些东西:
>>> test[ix_((a_dim,b_dim,c_dim))]
Traceback (most recent call last):
File "<pyshell#517>", line 1, in <module>
test[ix_((a_dim,b_dim,c_dim))]
File "C:\Python27\lib\site-packages\numpy\lib\index_tricks.py", line 73, in ix_
raise ValueError, "Cross index must be 1 dimensional"
ValueError: Cross index must be 1 dimensional
有什么建议吗? 谢谢!
【问题讨论】:
标签: multidimensional-array numpy slice