2015-12-03 114 views
0

我對python非常陌生,我想從1911 x 2矩陣中提取一些元素,以便當列1中的元素介於兩個值之間時,它們將與列2中的相應元素一起提取到單獨的矩陣。不幸的是,我不能只編碼矩陣索引,因爲矩陣並不總是相同的。有條件地從Python中的矩陣中提取元素。

爲了讓你的背景下面的代碼:

import numpy as np 
import pylab 
import matplotlib.pyplot as plt 
from scipy.optimize import leastsq 


data = np.genfromtxt('Ramantest.txt') 

x = data[:,] [:,0] 
y = data[:,] [:,1] 

plt.plot(x,y) 
plt.show() 

的輸出中是這樣的頻譜。
Spectra

我想提取對應於當X值是我想也許使用np.hsplit創建一個新的矩陣2600和2800

之間的情節x和y的值的元素可能是一種選擇,但我怎樣才能獲得代碼來確定創建分割的元素?

任何幫助理解

回答

1

使用np.searchsorted獲取數組索引並使用它們切片原始數組。

range = [800,1000] 

idx_low,idx_high = x.searchsorted(data[:,0], range) 

data_within_range = data[idx_low:idx_high,:] 
+0

它的作品,非常感謝! –

0

鑑於任何限制lowhigh,找到好的索引(low < data[:,0] < high):

np.logical_and(low < data[:,0], data[:,0] < high) 

然後提取對應於這些索引子陣列:

data[np.logical_and(.low < data[:,0], data[:,0] < high)] 

即使您的x數據沒有排序,這也可以工作。

在你的情況下,它看起來像x都是,所以你也能找到的第一個指數i_lowi_high這樣data[0, i_low] > lowdata[0,i_high] > high(使用searchsorted由Chirstian K.的建議),然後只用一個片: data[i_low:i_high]

+0

謝謝我已經嘗試了兩種方法現在,他們不僅他們工作,但我也理解他們!我確實有一些數據,我計劃檢查x沒有排序,所以謝謝你提供完整的答案。 –

+0

'searchsorted'只適用於已排序的數據 –

+0

偏題:如果您對(拉曼)光譜的峯擬合感興趣,請查看[peak-o-mat](http://lorentz.sf.net) 。 –