我正试图从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.]])
这让我很困惑,你能给我一些想法吗? 预先感谢!