我有一个非常大的numpy 2D数组M
,我需要从中获取数组中每个元素的所有可能的子矩阵,并将它们放入字典中。
我试过使用ndenumerate
和双for循环,但它们都很慢,有可能改进吗?
谢谢。
- 版本1*
poss = {}
for index, val in numpy.ndenumerate(M):
poss[index] = [ z for z in filter(lambda t: 2*L <= sub_matrix_dim(index, t) <= H, zip(*numpy.where(M != val))) ]
- 版本2*
poss = {}
for x in range(R):
for y in range(C):
poss[(x,y)] = [ z for z in filter(lambda t: 2*L <= sub_matrix_dim((x,y), t) <= H, zip(*numpy.where(M != M[x][y]))) ]
被调用的函数是:
def sub_matrix_dim(c1: tuple, c2: tuple): return numpy.empty((abs(c2[1] - c1[1]) + 1, abs(c2[0] - c1[0]) + 1), dtype=int).size
编辑例如,从这个2d数组:
[[0 0 0 0 0]
[0 1 1 1 0]
[0 0 0 0 0]]
在poss{}
中有L = 1
和H = 6
,则有:
{
(0, 0): [(1, 1), (1, 2)],
(0, 1): [(1, 1), (1, 2), (1, 3)],
(0, 2): [(1, 1), (1, 2), (1, 3)],
...
(1, 1): [(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 4), (2, 0), (2, 1), (2, 2), (2, 3)],
...
(2, 1): [(1, 1), (1, 2), (1, 3)],
(2, 2): [(1, 1), (1, 2), (1, 3)],
(2, 3): [(1, 1), (1, 2), (1, 3)],
(2, 4): [(1, 2), (1, 3)]
}
1条答案
按热度按时间nkkqxpd91#
我可能走错方向了,但这不管用吗?