我有一个numpy数组:
isPopupOpened = false
我想基于索引(而不是切片)获取数组的一部分:
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_
来访问数组都应返回数组的视图,而不是副本。
答案 0 :(得分:4)
花式索引返回一个副本;因此您的原始阵列将不会更新。您可以使用numpy.where
更新您的值:
arr[ix] = np.where(arr[ix] < 5, 0, arr[ix])
array([[ 0, 2, 0, 4, 5],
[ 6, 7, 8, 9, 10]])
答案 1 :(得分:0)
当您这样做:
arr[ix] = 0
python解释器执行arr.__setitem__(ix, 0)
,因此修改了原始对象。
在第二种情况下,subarr
独立于arr
,它是arr子集的副本。然后,您修改此副本。