为数组的条件选定元素分配新值
Assign new value to a condition selected element of an array
我在为数组的选定元素赋值时遇到问题,我不明白为什么会这样。
我在 pyhton 中编程,虽然代码复杂得多,但我遇到的问题可以用这个小代码重现:
Yr = np.arange(0, 10)
Xg = np.arange(0, 10)
现在我想按如下方式更改我选择的元素的值:
Yr[Xg>5][2] = 10
...它什么都不做:
In [275]: Yr
Out[275]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
谢谢。
我试过改变赋值的类型,但也没用。
正如其他人在他们的回答中提到的那样,Yr[Xg>5]
是一个新数组,对它的任何更改都不适用于原始数组,但您可以像这样使用 np.put
来做到这一点:
np.put(Yr, np.where(Xg>5)[0][2], 10)
或者简单地这样做:
Yr[np.where(Xg>15)[0][2]] = 10
因为它创建了数组的副本
所以你修改的是副本而不是数组本身
Yr[Xg>5]
是一个新数组
Yr = Yr[Xg>5]
Yr[2] = 10
print(Yr) # will print [ 6 7 10 9]
我在为数组的选定元素赋值时遇到问题,我不明白为什么会这样。
我在 pyhton 中编程,虽然代码复杂得多,但我遇到的问题可以用这个小代码重现:
Yr = np.arange(0, 10)
Xg = np.arange(0, 10)
现在我想按如下方式更改我选择的元素的值:
Yr[Xg>5][2] = 10
...它什么都不做:
In [275]: Yr
Out[275]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
谢谢。
我试过改变赋值的类型,但也没用。
正如其他人在他们的回答中提到的那样,Yr[Xg>5]
是一个新数组,对它的任何更改都不适用于原始数组,但您可以像这样使用 np.put
来做到这一点:
np.put(Yr, np.where(Xg>5)[0][2], 10)
或者简单地这样做:
Yr[np.where(Xg>15)[0][2]] = 10
因为它创建了数组的副本 所以你修改的是副本而不是数组本身
Yr[Xg>5]
是一个新数组
Yr = Yr[Xg>5]
Yr[2] = 10
print(Yr) # will print [ 6 7 10 9]