Python 使用同一数组中的另一个值作为索引替换numpy数组中的值

Python 使用同一数组中的另一个值作为索引替换numpy数组中的值,python,arrays,numpy,Python,Arrays,Numpy,我正在寻找一种优雅的方式来完成以下工作: 我有这样一个数组: [[0, 0, 0, 1], [0, 0, 0, 2], [0, 0, 0, 1]] 我想用1替换每行上的元素,它的索引等于该行的最后一个元素。因此,对于第一行,我需要索引为1的元素变为1,对于第二行,索引为2的元素变为1,依此类推。 这只是一个例子,实际上我有更大的矩阵,最后一列的值从0到9,我需要使用它来指示行的哪个元素变为1。IIUC,您可以使用 >>> s array([[0, 0, 0, 1],

我正在寻找一种优雅的方式来完成以下工作:

我有这样一个数组:

[[0, 0, 0, 1],
 [0, 0, 0, 2],
 [0, 0, 0, 1]]
我想用1替换每行上的元素,它的索引等于该行的最后一个元素。因此,对于第一行,我需要索引为1的元素变为1,对于第二行,索引为2的元素变为1,依此类推。 这只是一个例子,实际上我有更大的矩阵,最后一列的值从0到9,我需要使用它来指示行的哪个元素变为1。

IIUC,您可以使用

>>> s
array([[0, 0, 0, 1],
       [0, 0, 0, 2],
       [0, 0, 0, 1]])
>>> s[np.arange(len(s)),s[:,-1]] = 1
>>> s
array([[0, 1, 0, 1],
       [0, 0, 1, 2],
       [0, 1, 0, 1]])
IIUC,你可以使用

>>> s
array([[0, 0, 0, 1],
       [0, 0, 0, 2],
       [0, 0, 0, 1]])
>>> s[np.arange(len(s)),s[:,-1]] = 1
>>> s
array([[0, 1, 0, 1],
       [0, 0, 1, 2],
       [0, 1, 0, 1]])
屈服

[[0, 1, 0, 1], [0, 0, 1, 2], [0, 1, 0, 1]]
屈服

[[0, 1, 0, 1], [0, 0, 1, 2], [0, 1, 0, 1]]

谢谢,这对我的学习也有帮助,只是我更喜欢没有for loop的东西。谢谢,这对我的学习也有帮助,只是我更喜欢没有for loop的东西。谢谢!在我的尝试中,我从来没有这样组织过。谢谢!在我的尝试中,我从来没有这样组织过。