2016-09-02 9 views
2

私は約300000の値を持つ大きな配列を扱っています。それは100 000行と3列を持っています。私はこの配列の繰り返しをしています。もし最初の列の値が10の制限を超えていれば、番号を置き換えたいと思います。これ?:私はすべて私の他の反復に含まれているだけでなく、私のコードはかなり遅くなりますように、他の2列に対して、このsequenseを繰り返す必要がありアレイ内の値を見つけて効率的に変更する

for i in range(N): 
    if array[i][0]>10: 
     array[i][0] = 0 

ような何かを実行するよりも任意のより効率的な方法はあります。

+1

可能であれば、NumPyを使用してください。特にあなたの配列が完全に数値である場合。 – Andrew

答えて

0

私はあなたが正しくyou`reそのような何かを探して理解している場合:

>>> from numpy import array 
>>> a = array([[1,2,3],[4,5,6],[7,8,9]]) 
>>> a 
array([[1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 9]]) 
>>> a[a>5]=10  # <--- here the "magic" happens 
>>> a 
array([[ 1, 2, 3], 
     [ 4, 5, 10], 
     [10, 10, 10]]) 
+2

_I_が質問を理解すれば、彼らは 'a [a> 10] = 0'を望むでしょう。 – martineau

+1

@martineau数値は重要ではない、という概念です。 –

+0

IMOあなたのコードがOPの質問に明記された(そしてコード化された)問題を正確に解決した場合、そのコンセプトは容易に把握できます。 – martineau

2

を使用すると、以下のように使用する値を置き換えるために、次にnumpyの配列(numpy.asarray)にあなたの配列を変換します

import numpy as np 
N = np.asarray(N) 

N[N > 10] = 0 

numpy.asarray documentation

1

各列に同じしきい値/置換値を使用したくないと思われました。その場合、3つの項目をタプルのリストにパックし、それを繰り返し実行することができます。あなたが必要とする

import numpy as np 

arr = np.ndarray(your_array) 
#Edited with your values, and a more than symbol 
threshold = 10 
column_id = 0 
replace_value = 0 
arr[arr[:, column_id] > threshold, column_id] = replace_value 

column_idthresholdを設定し、replace_value

+0

病気これをチェック!私の例では、 'arr [:、column_id]> threshold、column_id] = replace_value'でなければならないと思います。 – Stumpp

+0

例では、' threshold = 10'、 'column_id = 0'、' replace_value = 0'です。 – Andrew

関連する問題