Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据给定列中的值就地更改numpy数组?_Python_Arrays_Numpy - Fatal编程技术网

Python 根据给定列中的值就地更改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.

我有一个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.        ],
       [ 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分钟内,我将我的答案分成两行,并添加了一些注释以便于理解)