So I've got a 2-dimensional array, say list
:
list = [[x11, x12, x13, x14],
[x21, x22, x23, x24],
...]
Some samples of list
are:
# 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],
]
I need to iterate every two rows, for example [x11, x12, x13, x14] and [x21, x22, x23, x24], and do some complex comparisons:
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
here is usually small, but this nested loop runs thousands of times, so it takes very long to finish the program. I've read some tutorials of vectorizing in Numpy, but cannot figure out how to edit the code since the logic is kind of complex. Is there a way to optimize my code, even for a little bit? Any help would be highly appreciated. Thanks in advance!