【发布时间】:2019-03-04 13:42:09
【问题描述】:
我有一个 numpy 数组:
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
>> arr
[[ 1 2 3 4 5]
[ 6 7 8 9 10]]
我想根据索引(不是切片)获取数组的一部分:
ix = np.ix_([0, 1], [0, 2])
>> arr[ix]
[[1 3]
[6 8]]
并且我想修改原始数组中的那些元素,如果我这样做会起作用:
arr[ix] = 0
>> arr
[[ 0 2 0 4 5]
[ 0 7 0 9 10]]
但我只想在它们遵循特定条件时更改它们,例如它们小于5。我正在尝试这个:
subarr = arr[ix]
subarr[subarr < 5] = 0
但它并没有修改原来的。
>> arr
[[ 1 2 3 4 5]
[ 6 7 8 9 10]]
>> subarr
[[0 0]
[6 8]]
我不确定为什么这不起作用,因为使用 np.ix_ 通过索引访问数组和使用掩码 subarr < 5 都应该返回数组的视图,而不是副本。
【问题讨论】:
-
提示:查看 arr[ix][arr[ix]
-
@ColonelBeauvel 这不会改变 arr 值。
-
我不是说这个,只是看维度似乎不是同一个对象。因此,我怀疑没有引用 arr 。还在寻找答案。
-
@ColonelBeauvel 你在说什么?
-
stackoverflow.com/a/21502377/5625981 这个答案解释了如果使用“花式索引”,numpy 总是返回一个副本。
标签: python arrays python-2.7 numpy indexing