Python 根据给定列中的值就地更改numpy数组?
我有一个numpy阵列:Python 根据给定列中的值就地更改numpy数组?,python,arrays,numpy,Python,Arrays,Numpy,我有一个numpy阵列: array([[ 0.68597575, 0.05544651, -1. ], [ 0.33494648, 0.46368367, 1. ], [ 0.42486765, 0.89427025, 1. ], [ 0.62408611, 0.64633939, 1. ], [ 0.37087957, 0.53077302, -1.
array([[ 0.68597575, 0.05544651, -1. ],
[ 0.33494648, 0.46368367, 1. ],
[ 0.42486765, 0.89427025, 1. ],
[ 0.62408611, 0.64633939, 1. ],
[ 0.37087957, 0.53077302, -1. ],
[ 0.21664159, 0.10786084, -1. ],
[ 0.13003626, 0.18425347, -1. ]])
我希望最后一个值为-1
的行乘以-1,并在实际矩阵中替换
我试过这个:
def transform(data):
for row in data:
if row[-1] == -1:
row = row * -1
但我知道还有比这更简单的方法。您可以通过执行以下操作来避免for循环:
data[data[:, -1] == -1] *= -1
我倾向于分两步进行,原因有二:(i)代码更容易理解;(ii)在第一步中创建的布尔索引通常可以在数据管道中的其他位置重用 创建用于选择行的布尔索引:
idx = M[:,-1] == -1
对索引数据执行转换:
M[idx,] *= -1
是的——看起来你在我写我的时候发布了你的答案,这与时间差一致(相隔约3分钟,在这3分钟内,我将我的答案分成两行,并添加了一些注释以便于理解)