gpt4 book ai didi

收集满足给定条件的numpy数组元素的Pythonic方法

转载 作者:行者123 更新时间:2023-12-04 17:09:34 25 4
gpt4 key购买 nike

因此,我正在使用数据 (xi, ti) 和 (xj,tj) 的两个时间序列之间的离散相关函数,其中 i 和 j = 1,2,3... 计算每个时间序列的滞后时间(i,j) 点对。然后将这些滞后存储在一个 numpy 数组 dst[i,j] 中,其中每个 (i,j) 元素表示该对的滞后时间。

我现在想收集前 n 个大于某个值的滞后和它们的 (i, j) 索引,但我希望它们是独立的对,这样没有两对具有相同的 i 或相同的 j 项(所以 (1, 2) 和 (3,2) 不起作用)。

作为一个简单的例子,假设我有:

dst = np.array([[0.2, 0.5, 0.9, 1.0],
[2.0, 3.0, 4.0, 5.0],
[7.0, 8.0, 12.0,13.0]])

我想要前两对的滞后值大于 3。我首先创建了一个 {(i, j) : lag} 形式的字典,其中包含滞后值 > 3 的所有元素,然后按滞后值对其进行排序值(value)。

idxi, idxj = np.where(dst>3)
mydict = {}
for i, j in zip(idxi, idxj):
mydict[(i,j)] = dst[i,j]
mydict = {k: v for k, v in sorted(mydict.items(), key=lambda item: item[1])}

#so now mydict = {(1, 2): 4.0, (1, 3): 5.0, (2, 0): 7.0, (2, 1): 8.0, (2, 2): 12.0, (2, 3): 13.0}

所以前两个独立项将是 (1,2) 和 (2,0)。但我不确定获得前两对的最佳方法,同时还要确保没有两对具有相同的 i 和 j 项。我确定我能想到一种复杂的方法来执行此操作,但我正在寻找一种更 pythonic 和快速的方法。我对操作 numpy 数组有点陌生,想知道实现我的目标的最佳方法。那么我怎样才能在这里得到前两个独立的对,有没有办法在不创建排序字典的情况下完成整个过程?

最佳答案

我不确定这是否太复杂了,但我认为它至少有效。

dst = [
[0.2, 0.5, 0.9, 1.0],
[2.0, 3.0, 4.0, 5.0],
[7.0, 8.0, 12.0, 13.0]
]


def find_minimum_value(row):
for column_index, value in enumerate(row):
if value > 3:
return column_index, value


answer = {}
for row_index, row in enumerate(dst):
values = find_minimum_value(row)
if values:
column_index, value = values
answer[(row_index, column_index)] = value

print(answer)

关于收集满足给定条件的numpy数组元素的Pythonic方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69775588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com