有条件地从Python中的矩阵中提取元素。

时间:2015-12-03 22:47:05

标签: python matrix

我是python的新手,我想从1911 x 2矩阵中提取一些元素,这样当第1列中的元素介于两个值之间时,它们将与第2列中的相应元素一起提取到单独的矩阵中。不幸的是,我不能只对矩阵索引进行编码,因为矩阵并不总是相同。

在这里为您提供代码:

 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值介于2600和2800之间时,我想提取与图上x和y值对应的元素。

我想也许使用np.hsplit来创建一个新矩阵可能是一个选项,但是如何让代码识别创建分割的元素呢?

任何帮助表示赞赏

2 个答案:

答案 0 :(得分:1)

使用np.searchsorted获取数组索引并使用它们来切割原始数组。

range = [800,1000]

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

data_within_range = data[idx_low:idx_high,:]

答案 1 :(得分: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] > low和{{1} (根据Chirstian K.建议使用data[0,i_high] > high,然后使用切片:searchsorted