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

标签 python numpy dictionary

因此,我正在使用数据 (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/

相关文章:

python - 使用python模块numba时出错

java - 如何迭代对象列表以从中创建新的 Map?

python - 如何访问字典中的列表值

java - 在MapReduce中分别处理多个输入文件

python - 使用 FFMPEG 和 FFSERVER 流式传输视频

python - 寻找树内最近的节点

python - 如何创建用于 pig 拉丁和嘶嘶声翻译的代码以及同时应用它们的代码?

python - 连续多行 f 弦的样式

带有 'rows' 和索引的 ismember 的 Python 版本

python - Numpy 和 CGI​​ 的问题