2015-09-30 61 views
1

我有一个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.  ], 
     [ 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 

但我知道会有什么比这更简单。

回答

2

您可以通过执行避免for循环:

data[data[:, -1] == -1] *= -1 
1

我喜欢做有两个原因这两个步骤:(i)更容易理解的代码;和(ii)通常在第一步骤中创建的布尔指数可以在数据流水线别处重用

创建选择行的布尔指数:

idx = M[:,-1] == -1 

做对索引数据变换:

M[idx,] *= -1 
+1

这和我的回答是一样的...... –

+1

是的 - 看起来你在写我的时候发布了你的,这与我的时间差异相符(〜3分钟,在那3分钟内将我的答案分成两行,并添加一些评论以使其更容易明白) – doug

相关问题