在numpy矩阵中统计真实值的数量(Python)

2024-04-29 04:08:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做个类似扫雷艇的东西

输入矩阵:

matrix = [[true, false, false],
          [false, true, false],
          [false, false, false]]

如果有炸弹在战场上,我不把它当作炸弹在周围。你知道吗

我想用numpy convalve做这个,但是我很难理解如何遍历矩阵,总是检查实际字段的左、上、右和下字段(在边界的情况下,我检查“空”字段,它肯定是0)

enter image description here


Tags: numpyfalsetrue情况矩阵matrix炸弹边界
3条回答

下面是一个使用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() - matrix[1][1]应该返回一个单元格周围的mine数。你知道吗

对我来说,消除边界问题最简单的方法就是用False单元格来完成矩阵。你知道吗

只使用numpy,包括来自herend_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)

相关问题 更多 >