2015-12-03 78 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) 。 –