【发布时间】:2019-05-09 02:55:28
【问题描述】:
我试图从 Numpy 文档中理解 combination of basic slicing and advanced indexing section。它说高级索引操作可能有不同的内存布局,但是我在下面的代码 sn-p 中观察到一些不同的行为:
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.]])
这让我很困惑,你能给我一些想法吗? 提前致谢!
【问题讨论】:
-
a[:,:] 除了查看整个数组之外什么都不做,