【发布时间】:2017-05-02 00:18:18
【问题描述】:
在尝试使用多个切片数组沿单独的维度切片 ndarray 时,我无法理解 numpy 广播错误背后的原因。
我正在尝试使用索引数组 picks 例如 np.arange(2, 306, 3) 和布尔数组 mask 沿第一维和第二维对 data ndarray (100, 306, 481) 进行切片,其中mask.shape 是 (481,) 其中 361 个元素是 True。
data[:, picks, mask] 返回
IndexError:形状不匹配:无法广播索引数组 连同形状 (102,) (361,)
但是,data[:, :, mask]、data[:, picks, :] 和 data[:, :10, mask] 按预期工作。
在这种情况下广播如何工作?什么是这样做的pythonic方式?
【问题讨论】:
-
如果你想要一片形状
(100, len(picks), len(mask)),你可以使用data[:, picks[:, np.newaxis], mask]。您不能广播具有(m,)和(n,)形状的数组,但可以使用(m, 1)和(n,)。 -
您可能还想检查函数
np.ix_。以上等价于data[np.ix_(arange(100), picks, mask)]。
标签: python arrays numpy indexing