2024-04-29 04:08:54 发布
网友
我想做个类似扫雷艇的东西
输入矩阵:
matrix = [[true, false, false], [false, true, false], [false, false, false]]
如果有炸弹在战场上,我不把它当作炸弹在周围。你知道吗
我想用numpy convalve做这个,但是我很难理解如何遍历矩阵,总是检查实际字段的左、上、右和下字段(在边界的情况下,我检查“空”字段,它肯定是0)
下面是一个使用scipy.signal.convolve2d的解决方案:
scipy.signal.convolve2d
import scipy import numpy as np # Input matrix, can be left as boolean matrix = np.array([[True, False, False], [False, True, False], [False, False, False]]) # Our dougnut filter W = np.array([[1, 1, 1], [1, 0, 1], [1, 1, 1]]) # Single convolve res = convolve2d(matrix, W, 'same')
我们得到了确切的结果:
res array([[1, 2, 1], [2, 1, 1], [1, 1, 1]])
使用{cd1}方法来保持它。你知道吗
np.matrix(matrix).sum()将计算矩阵中的所有True。你知道吗
np.matrix(matrix).sum()
True
所以np.matrix(matrix).sum() - matrix[1][1]应该返回一个单元格周围的mine数。你知道吗
np.matrix(matrix).sum() - matrix[1][1]
对我来说,消除边界问题最简单的方法就是用False单元格来完成矩阵。你知道吗
False
只使用numpy,包括来自here的nd_window
numpy
nd_window
m_pad = np.pad(matrix, ((1,1),(1,1)), 'constant', constant_values=(False, False)) filter = np.array([[1,1,1],[1,0,1],[1,1,1]], dtype = bool) adj_matrix = np.einsum('ijkl,kl->ij', nd_window(m_pad, 3), filter)
此外,还可以使用^{}
adj_matrix = convolve2d(matrix, filter, 'same', fillvalue = False)
下面是一个使用
scipy.signal.convolve2d
的解决方案:我们得到了确切的结果:
使用{cd1}方法来保持它。你知道吗
np.matrix(matrix).sum()
将计算矩阵中的所有True
。你知道吗所以
np.matrix(matrix).sum() - matrix[1][1]
应该返回一个单元格周围的mine数。你知道吗对我来说,消除边界问题最简单的方法就是用
False
单元格来完成矩阵。你知道吗只使用
numpy
,包括来自here的nd_window
此外,还可以使用^{}
相关问题 更多 >
编程相关推荐