我有一个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
都应该返回数组的视图,而不是副本。你知道吗
花式索引返回一个副本;因此原始数组不会被更新。可以使用^{} 更新值:
当您这样做时:
python解释器执行
arr.__setitem__(ix, 0)
,因此修改原始对象。你知道吗在第二种情况下,
subarr
独立于arr
,它是arr子集的一个副本。然后修改这个副本。你知道吗相关问题 更多 >
编程相关推荐