gpt4 book ai didi

python - 加速Python中过滤矩阵的代码

转载 作者:行者123 更新时间:2023-12-01 05:22:28 25 4
gpt4 key购买 nike

我有一个来自 [[row1],[row2] 等] 的对称矩阵 d1,我想从中删除一些元素。我要删除的元素的索引在列表 ind 中指示(例如 ind = [1,2,3] 表示我要删除 d1[1][1],d1[2][2] 和 d1[3 ][3])。

我编写了以下代码,将过滤后的矩阵 d1 写入 d2 中。然而,它需要永远运行。有什么方法可以加快该代码的速度吗?

 for k in range(len(d1)):
if k not in ind:
d2.append([])
for j in range(len(d1)):
if j not in ind:
d2[-1].append(d1[k][j])

print(d2)
return d2

示例:

d1 = [[1, 2, 3,6,8],[4,5,6,6,6],[7,8,9,6,6],[1, 2, 3,6,6],[1,2,3,6,9]]

ind = [0,3]

d2 = [[5,6,6],[8,9,6],[2, 3,9]]

最佳答案

主要问题可能是,如果 ind 是一个非常长的列表(数千个条目),那么每次执行 if x not in ind 时,您都必须检查< em>整个列表。只需将 ind 更改为 set 可能会大大加快速度。此外,您可以创建一个要保留的良好索引列表,而不是检查两个循环中的条件。最后,使其成为列表理解可能会加快速度并使其更具可读性。

ind_set = set(ind)
retain = [i for i in range(len(d1)) if i not in ind_set]
d2 = [[d1[k][j] for j in retain] for k in retain]

关于python - 加速Python中过滤矩阵的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22018747/

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