高级索引和基本切片的结合

时间:2019-05-09 02:55:29

标签: python numpy

我正试图从Numpy文档中了解combination of basic slicing and advanced indexing section。它说高级索引操作可能具有不同的内存布局,但是我在下面的代码片段中观察到了一些不同的行为:

a = np.random.randn(3,3)
# case1
a[:, :][a > 0] = 0
output:
array([[ 0.        , -1.07474179, -0.06313855],
       [ 0.        , -0.74049837, -1.7376245 ],
       [-0.93616586,  0.        , -2.2520479 ]])
# case2
a[:, (0, 1, 2)][a > 0] = 0
output:
array([[ 0.67667783, -1.07474179, -0.06313855],
       [ 0.74418166, -0.74049837, -1.7376245 ],
       [-0.93616586,  0.96351976, -2.2520479 ]])

在我看来,第二种情况是高级索引编制,因此将不会对原始a进行修改。 (如果我误会了,请纠正我。)

但是,以下情况似乎是关键不是高级索引。

a[:, (0, 1, 2)] = 0
output:
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

这让我很困惑,你能给我一些想法吗? 预先感谢!

0 个答案:

没有答案