numpy:在矩阵中找到足以满足相邻条件的所有数字对

时间:2018-02-20 14:47:10

标签: python numpy

假设你有一个矩阵:

import numpy as np
mat = np.array([[0, 0, 1], [2, 0, 1], [1, 0, 3]])

并且您希望检索此矩阵中彼此相邻的所有数字对,不等于零并忽略零。在这种情况下,这将是3& 1和2& 1,但我希望能够将它应用于一个非常大的矩阵。非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题,但不可否认,它并不是最优雅的;我在一个1000x1000的随机整数矩阵上进行了测试,而且速度非常快(只需一秒钟)。我不确定你是如何考虑输出的,所以我将它放入名为res的列表中。

import numpy as np
# To test on larger array
mat = np.array(np.random.random_integers(0, 9, 1000 * 1000)).reshape(1000, 1000)
res = []

for a in mat:
    # Take out the zeros
    no_zeros = a[a!=0]
    if len(no_zeros) > 1:
        for i in range(len(no_zeros) - 1):
            # Only append pairs of non-equal neighbours
            if no_zeros[i] != no_zeros[i+1]:
                res.append((no_zeros[i], no_zeros[i+1]))