2016-09-13 50 views
-1

我有一個2D數組。在操作數組的x列後,我創建了一個新的2D數組(data2),並對x列進行了新的更改(並且y列保持不變)。我現在想要將data2中的y值數組附加到新數組,只有當它的x值大於3或小於5時。例如,如果2D數組是[(2,3),[4,5] ,[3.5,6],[9,7]),我只想在我的新數組中使用5和6的y值,因爲它們的x值介於3和5之間。我卡住了。請幫忙!在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

以下是爲了清晰起見在幾個步驟中斷開的單線解決方案。

鑑於陣列

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

,可以看到其中x值大於3且小於5通過使用np.where()元件的索引

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

哪裏a[:,0] = array([ 2. , 4. , 3.5, 9. ])是所有x值的數組。現在,你可以得到所有相應y值,其中3 < x < 5由:

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

您可以使用此功能,扁平化的列表,然後根據附加價值。

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 ...