python - 在 Python 中查找不重叠的子矩阵
问题描述
非重叠子矩阵
我一直在寻找一种仅获取非重叠子矩阵的方法。我下面的代码找到了所有子矩阵。
代码:
n = 4
matrix = [[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
k = 2 #Finding 2x2 submatrices
t=[]
for i in range(n-k+1):
for j in range(n-k+1):
l=[]
for x in range(i,i+k):
for y in range(j,j+k):
if x==i or x==i+k-1 or y==j or y==j+k-1:
l.append(matrix[x][y])
t.append(l)
所以如果我打印t
我得到:
for i in t:
print(i)
输出/输出:
[1, 2, 5, 6]
[2, 3, 6, 7]
[3, 4, 7, 8]
[5, 6, 9, 10]
[6, 7, 10, 11]
[7, 8, 11, 12]
[9, 10, 13, 14]
[10, 11, 14, 15]
[11, 12, 15, 16]
但我想要的 o/p 是:
[1,2,5,6]
[3,4,7,8]
[9,10,13,14]
[11,12,15,16]
解决方案
当您循环遍历 中的元素时range(n-k+1)
,您range
使用参数调用start =0、stop =n-k+1=3、step =1,这将导致数组[0, 1, 2]
。使用它作为您的起点是问题所在。
为确保您的结果仅包含互斥元素,请将step参数更改为 k:
In [7]: t = []
...: for i in range(0, n, k):
...: for j in range(0, n, k):
...: t.append([
...: matrix[i+ii][j+jj]
...: for ii in range(k) for jj in range(k)])
In [8]: t
[[1, 2, 5, 6], [3, 4, 7, 8], [9, 10, 13, 14], [11, 12, 15, 16]]
推荐阅读
- tensorflow - LSTM 如何知道 Conv1D-LSTM 网络中的时间步数和特征?
- c# - ASP.NET Core web.config requestFiltering 不覆盖 applicationhost.config
- blockchain - 将 ERC20 代币与其他 ERC20 代币交换
- mysql - 如何通过 Active Record Query Interface 编写 sql 请求并连接两个表,其中条件 - ids 数组
- c - 为什么第二个 malloc 在这种情况下会失败?
- gherkin - 有没有办法在 Gherkin 功能或场景描述中转义关键字?
- swift - Swift:如何在 Userdefaults 中保存和加载包含结构值的字典
- java - Java 生菜反应模式 - 捕获错误?
- python - 处理大小为 10**6 的列表的时间复杂度
- regex - 查找重复标记的子字符串