2016-09-04 9 views
0

私は、行と束が3列の配列を持っています。私は、この値を下回るすべての値を0に変更するこのコードを持っています。どちらの数値がしきい値を超えているか否かを判断するトリックはありますか?私は配列np.array([[1,2,3],[4,5,6],[7,8,9]])を持っていると言うことができます。私は列1を選択し、値1,4,7(各行の最初の値)で配列を取得します。しきい値が5の場合、5より大きいすべての値を自己の負にする方法があるので、1 、4,7は1,4、-7に変化する。しきい値を超えるすべての値をそれ自身の負数に変更します。

import numpy as np 

arr = np.ndarray(my_array) 
threshold = 5 
column_id = 0 
replace_value = 0 
arr[arr[:, column_id] > threshold, column_id] = replace_value 

答えて

2

後で編集するために申し訳ありませんが、この

In [37]: arr = np.array([[1,2,3],[4,5,6],[7,8,9]]) 

In [38]: arr[:, column_id] *= (arr[:, column_id] > threshold) * -2 + 1 

In [39]: arr 
Out[39]: 
array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [-7, 8, 9]]) 

を試してみてください。私は以下のことをお勧めします。

In [48]: arr 
Out[48]: 
array([[1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 9]]) 

In [49]: col = arr[:, column_id] 

In [50]: col[col > threshold] *= -1 

In [51]: arr 
Out[51]: 
array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [-7, 8, 9]]) 
+0

これはまさに私がそれを望むように動作します。それがどのように機能するかを理解しようとしています。なぜ、 '* -2 + 1'の終わりに? – Stumpp

+0

'arr [:、column_id]> threshold'は' 1'または '0'として扱われる' true'または 'false'配列を返します。 '* -2 + 1'は' -1'と '1'をそれぞれマップします – jinhwanlazy

0
import numpy as np 
    x= list(np.arange(1,10)) 
    b = [] 
    for i in x: 
     if i > 4: 
      b.append(-i) 
     else: 
      b.append(i) 

    print(b) 
    e = np.array(b).reshape(3,3) 
    print('changed array') 
    print(e[:,0]) 

    output : 
    [1, 2, 3, 4, -5, -6, -7, -8, -9] 
    changed array : 
    [ 1 4 -7] 
関連する問題