2016-09-13 8 views
-1

私は2次元配列を持っています。配列のx列を操作した後、私はx列に新しい変更を加えた新しい2D配列(data2)を作成しました(そしてy列は同じままです)。ここで、x値が3より大きいか5より小さい場合にのみdata2のy値の配列を新しい配列に追加します。たとえば、2次元配列が([2,3]、[4,5] 、[3.5,6]、[9,7])、xの値が3と5の間であるため、私は新しい配列のy値が5と6しか必要ではないでしょう。助けてください!2次元配列の部分をPythonで加算する

import numpy as np 
import matplotlib.pyplot as plt 

data = np.loadtxt('blah.txt') #blah.txt is a 2d array 

c = (3*10)^8 

x = c /((data[:,0])*10) 

y = data[:,1] 


data2 = np.array((x,y)).T 

def new_yarray(data2): 

    yarray =[] 

    if data2[:,0] <= 5 or data2[:,0] >= 3: 

     np.append(data2[:,1]) 

    print yarray 

    return yarray 
+0

は、だから、問題の解決策を見つけるために管理するのですか? – TuanDT

答えて

1

ここでは、明確にするためにいくつかの手順で破られた1ライナーの解決策を示します。

a[:,0] = array([ 2. , 4. , 3.5, 9. ])がある
>>> np.where(np.logical_and(a[:,0] > 3,a[:,0] < 5)) 
(array([1, 2]),) 

:あなたはインデックスx値が3以上とnp.where()を使用して、5未満である要素のを見つけることができる配列

>>> a 
array([[ 2. , 3. ], 
     [ 4. , 5. ], 
     [ 3.5, 6. ], 
     [ 9. , 7. ]]) 

を考えると

すべてのx値の配列

>>> a[np.where(np.logical_and(a[:,0] > 3,a[:,0] < 5))][:,1] 
array([ 5., 6.]) 
0

あなたが応じて値を追加し、リストを平らにするためにこの機能を使用することができ:さて、あなたは3 < x < 5は、すべての対応y値を得ることができます。

この場合
def flatten_list(a, result=None): 
    """ Flattens a nested list. """ 
    if result is None: 
     result = [] 

    for x in a: 
     if isinstance(x, list): 
      flatten_list(x, result) 
     else: 
      result.append(x) 
    return result 

lst = ([2,3], [4,5], [3.5,6], [9,7]) 

lst = flatten_list(lst) 

new_lst = [] 
for i in lst: 
    if (float(i) > 3 and float(i) < 5): 
     new_lst.append(i) 
print new_lst 

、わずか3.5および4は3より大きく5以下である...