在ndarray中切割多个维度

时间:2014-10-29 20:02:48

标签: python arrays numpy slice

如何在一行中按多个维度对ndarray进行切片?检查以下代码段中的最后一行。这看起来很基本,却给人一种惊喜......但为什么呢?

import numpy as np

# create 4 x 3 array
x = np.random.rand(4, 3)

# create row and column filters
rows = np.array([True, False, True, False])
cols = np.array([True, False, True])

print(x[rows, :].shape == (2, 3))  # True ... OK
print(x[:, cols].shape == (4, 2))  # True ... OK
print(x[rows][:, cols].shape == (2, 2))  # True ... OK
print(x[rows, cols].shape == (2, 2))  # False ... WHY???

1 个答案:

答案 0 :(得分:4)

由于rowscols是布尔数组,所以:

x[rows, cols]

就像:

x[np.where(rows)[0], np.where(cols)[0]]

是:

x[[0, 2], [0, 2]]

获取位置(0, 0)(2, 2)的值。另一方面,做:

x[rows][:, cols]

的工作方式如下:

x[[0, 2]][:, [0, 2]]

在此示例中返回形状(2, 2)