我是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来创建一个新矩阵可能是一个选项,但是如何让代码识别创建分割的元素呢?
任何帮助表示赞赏
答案 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)
如果有任何限制low
和high
,请找到好的索引(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_low
和i_high
,以便data[0, i_low] > low
和{{1} (根据Chirstian K.建议使用data[0,i_high] > high
,然后使用切片:searchsorted