【发布时间】:2021-04-17 08:55:33
【问题描述】:
所以我有一个二维数组,比如list:
list = [[x11, x12, x13, x14],
[x21, x22, x23, x24],
...]
list 的一些示例是:
# numbers in list are all integers
list = [[0, 17, 6, 10],
[0, 7, 6, 10],
]
list = [[6, 50, 6, 10],
[0, 50, 6, 10],
]
list = [[6, 16, 6, 10],
[6, 6, 6, 10],
]
list = [[0, 50, 6, 10],
[6, 50, 6, 10],
[6, 40, 6, 10]
]
list = [[0, 27, 6, 10],
[0, 37, 6, 10],
]
我需要每两行迭代一次,例如[x11,x12,x13,x14]和[x21,x22,x23,x24],并做一些复杂的比较:
cnt1 = cnt2 = cnt3 = cnt4 = cnt5 = 0
for i in range(0, length):
for j in range(i + 1, length):
if (list[i][0] + list[i][2] == list[j][0] or list[j][0] + list[j][2] == list[i][0]) and \
list[i][1] == list[j][1]:
cnt1 += 1
if list[i][3] == list[j][3]:
cnt2 += 1
else
cnt3 += 1
elif (list[i][1] + list[i][3] == list[j][1] or list[j][1] + list[j][3] == list[i][1]) and \
list[i][0] == list[j][0]:
cnt4 += 1
if list[i][2] == list[j][2]:
cnt2 += 1
else
cnt3 += 1
else
cnt5 += 1
# do something with the counts
length这里通常很小,但是这个嵌套循环运行了数千次,所以完成程序需要很长时间。我已经阅读了一些在 Numpy 中进行矢量化的教程,但由于逻辑有点复杂,因此无法弄清楚如何编辑代码。有没有办法优化我的代码,哪怕只是一点点?任何帮助将不胜感激。提前致谢!
【问题讨论】:
-
看起来
map()在这里可以很好地为您服务 -
@UmairMubeen 感谢您的回复。但我的更像是一个效率问题,而不是那个。
-
如果您追求的是矢量化,则需要填写所有
#do somethings 以获得解决方案。如果这些条件是真实的,则取决于条件是什么以及您正在做什么,本机 numpy 矢量化可能/可能不可能。如果你想加速你的代码,你考虑过使用 Numba 吗? -
@VortexYT 你能说得更具体一点吗?谢谢!
标签: python arrays numpy optimization vectorization