我有一个mxn
矩阵A
,其中m%t = n%t = 0
,因此一个较小的txt
矩阵B
平铺矩阵,没有边界或重叠。我想检查A
是否完全由B
的tile组成,而不将tiling作为一个尽可能有效的中间步骤来计算。此外,对于我的特殊用例,不需要知道B
。测试A
是否在每个方向上的每个txt
瓷砖上严格地重复它自己就足够了。你知道吗
数值示例:
A = [[1, 0, 1, 0],
[0, 1, 0, 1],
[1, 0, 1, 0],
[0, 1, 0, 1]]
B.shape = [2,2]
--> True
B.shape = [1,1]
--> False
到目前为止,我计算了一个比较矩阵C
,它只是一个B
的平铺,以适应A
的大小:
import numpy as np
x,y = B.shape
x_a, y_a = A.shape
x_t = x_a/x
y_t = y_a/y
B_dash = A[:x, :y]
C = np.tile(B_dash,(x_t, y_t))
np.count_nonzero(A-C)
有没有更快的方法,不用计算C
?你知道吗
应用方法1:似乎我们把B在A中出现的次数计算为不同的块。所以,我们可以用^{} -
方法2:和
NumPy
在一起,我们会-示例运行-
不生成C就可以得到结果。您可以通过以下方法来实现:
也就是说,比较A的第一个
y_a-y
列和最后一个y_a-y
列,然后对行执行类似的操作。我没有测试上面的代码,但是应该更快,因为使用这个方法numpy
不会分配新的内存。你知道吗最后一条语句可以优化为:
因为如果第一项是
True
,我们已经知道A的列是t次重复的。你知道吗相关问题 更多 >
编程相关推荐