Python 在二维NumPy数组上设置值

Python 在二维NumPy数组上设置值,python,arrays,numpy,Python,Arrays,Numpy,如果我有一个NumPy数组和一个行索引列表: import numpy as np x = np.random.rand(50).reshape(10,5) row_idx = [0, 1, 4] 如何设置row_idx行中小于0.5到零的所有值 我试过: x[row_idx][x[row_idx] < 0.5] = 0.0 x[row_idx][x[row_idx]

如果我有一个NumPy数组和一个行索引列表:

import numpy as np

x = np.random.rand(50).reshape(10,5)
row_idx = [0, 1, 4]
如何设置
row_idx
行中小于0.5到零的所有值

我试过:

x[row_idx][x[row_idx] < 0.5] = 0.0
x[row_idx][x[row_idx]<0.5]=0.0

但是这没有做任何事情

你可以用
np来做。其中

In [26]: x[row_idx] = np.where(x[row_idx] < 0.5, 0, x[row_idx])

In [27]: x
Out[27]:
array([[0.94870486, 0.        , 0.        , 0.89030411, 0.50505295],
       [0.56803186, 0.90804518, 0.69843535, 0.77174293, 0.        ],
       [0.1318847 , 0.95940137, 0.92036048, 0.669007  , 0.15404623],
       [0.90021311, 0.72959638, 0.82705006, 0.65329554, 0.3714969 ],
       [0.56293165, 0.        , 0.        , 0.        , 0.        ],
       [0.46015752, 0.96294812, 0.0678065 , 0.66693152, 0.69825679],
       [0.63310433, 0.59532105, 0.75913618, 0.60258213, 0.48668606],
       [0.69935925, 0.15807776, 0.8589115 , 0.37657828, 0.69651669],
       [0.87587399, 0.68772743, 0.59854082, 0.67857679, 0.34182774],
       [0.3734155 , 0.06255165, 0.02622334, 0.17993743, 0.1783275 ]])
[26]中的
x[row\u idx]=np.其中(x[row\u idx]<0.5,0,x[row\u idx])
In[27]:x
出[27]:
数组([[0.94870486,0,0,0.89030411,0.50505295],
[0.56803186, 0.90804518, 0.69843535, 0.77174293, 0.        ],
[0.1318847 , 0.95940137, 0.92036048, 0.669007  , 0.15404623],
[0.90021311, 0.72959638, 0.82705006, 0.65329554, 0.3714969 ],
[0.56293165, 0.        , 0.        , 0.        , 0.        ],
[0.46015752, 0.96294812, 0.0678065 , 0.66693152, 0.69825679],
[0.63310433, 0.59532105, 0.75913618, 0.60258213, 0.48668606],
[0.69935925, 0.15807776, 0.8589115 , 0.37657828, 0.69651669],
[0.87587399, 0.68772743, 0.59854082, 0.67857679, 0.34182774],
[0.3734155 , 0.06255165, 0.02622334, 0.17993743, 0.1783275 ]])

关于为什么OP的代码在
x[row_idx]=0.0
x[x<0.5]=0.0
都起作用的情况下不起作用,有什么解释吗?他的第二个索引将其转换为1D数组,如果排除该任务,您可以看到它。谢谢@Randy。成功了!