我有一个很大的数据集,我正在试图找到局部最大值及其索引。我是为了得到当地的极大值而去的,但是我想不出一个方法来得到他们的指数。问题是,我只需要正值的最大值,我们应该忽略负值。换句话说,这就像将列表分割成几个具有正值的段,然后得到这些最大值。
例如,test_data = 2,35,-45,56,5,67,21,320,55,-140,-45,-98,-23,-23,35,67,34,-30,-86,4,-93,35,88,32,98,-6
我的代码是:
def global_peaks(test_data):
counter1 = []
index = []
global_peak = []
global_idx = []
for idx, data in enumerate(test_data):
if data > 0:
counter1.append(data)
index.append(idx)
else:
if(len(counter1) != 0):
global_peak.append(max(counter1))
index.append(idx)
global_idx.append(index)
counter1.clear()
index.clear()
return global_peak, global_idxglobal_peaks(test_data)
([35, 320, 67, 4, 98], [[], [], [], [], []])当涉及到值时,结果是正确的,而不是指数。
发布于 2022-11-02 16:00:23
def global_peaks(test_data):
counter1 = []
index = []
global_peak = []
global_idx = []
for idx, data in enumerate(test_data):
if data > 0:
counter1.append(data)
index.append(idx)
else:
if(len(counter1) != 0):
global_peak.append(max(counter1))
index.append(idx)
global_idx.append(index)
counter1.clear()
index.clear()
index.append(1) # <-- for demonstration
return global_peak, global_idx
global_peaks(test_data)
# Output
([35, 320, 67, 4, 98], [[1], [1], [1], [1], [1]])一个问题是附加一个list (global_idx.append(index)),它是一个可变的对象。您正在添加对此列表的引用,因此输出将在输出时显示该列表中的任何内容。您需要使用的是该列表(index.copy())的副本,尽管这仍然没有给出所需的结果。为什么这些行应该给出相应的索引
index.append(idx)
global_idx.append(index)这将为您提供相应的索引:
max_idx = index[counter1.index(max(counter1))]关于您的一般方法的一个注意事项:如果您在一个仅为正值的区域中有2个或更多的局部最大值,则只会找到一个。这就是你想要的吗?
完整代码如下所示:
def global_peaks(test_data):
counter1 = []
index = []
global_peak = []
global_idx = []
for idx, data in enumerate(test_data):
if data > 0:
counter1.append(data)
index.append(idx)
else:
if(len(counter1) != 0):
global_peak.append(max(counter1))
max_idx = index[counter1.index(max(counter1))] # <- changed
global_idx.append(max_idx) # <- changed
counter1.clear()
index.clear()
return global_peak, global_idx
#Output
globla_peaks(test_data)
([35, 320, 67, 4, 98], [1, 7, 15, 19, 24])https://stackoverflow.com/questions/74291821
复制相似问题