根据二维数值数组中零值的坐标在矩阵中的位置将其分组为列表

西斯科布鲁克

除了边界零值,是否可以将其余零值的坐标(作为元组)分组到此numpy数组的不同列表中?

[[ 0  0  0  0  0  0  0  0  0  0  0]
 [ 0  1  1  1  0  0  0  1 10  2  0]
 [ 0  2 10  2  1  0  0  1  2 10  0]
 [ 0 10  3 10  1  0  0  0  1  1  0]
 [ 0  1  2  1  1  0  0  0  0  0  0]
 [ 0  1  2  1  2  2  2  1  0  0  0]
 [ 0 10  2 10  2 10 10  1  0  0  0]
 [ 0  1  2  1  2  2  2  1  1  1  0]
 [ 0  0  0  0  0  0  0  0  1 10  0]
 [ 0  0  0  0  0  0  0  0  1  1  0]
 [ 0  0  0  0  0  0  0  0  0  0  0]]

对于前。在上面的网格中,有两个零的“组”,一个在左下角,另一个在右上角。对于每个这样生成的矩阵,可以将它们放入单独的列表中吗?以下是用于创建矩阵“ sol_mat”的代码:-

import numpy as np
import random

bomb_mat = np.zeros((11,11), dtype = int)
for i in range(10):
    a = random.randint(1,9)
    b = random.randint(1,9)
    bomb_mat[a,b] = 1

sol_mat = np.zeros(11,11), dtype = int)
for j in range(1,10):
    for k in range(1,y-1):
        if bomb_mat[j,k] == 1:
            sol_mat[j,k] = 10
        else:
            sol_mat[j,k] = bomb_mat[j-1,k-1] + bomb_mat[j,k-1] + bomb_mat[j+1,k-1]+ bomb_mat[j-1,k] + bomb_mat[j+1,k] + bomb_mat[j-1,k+1] + bomb_mat[j,k+1] + bomb_mat[j+1,k+1]

尝试创建扫雷车

硬化的

我对您的代码做了一些调整。主要是我尝试避免for循环,而我曾经使用scipys convolve2d()过create sol_mat这种方法的主要优点是您不必担心图像的边缘情况。使用3x3 kernelones炸弹的布尔阵列上给你正好邻近炸弹(在扫雷舰标志)的数量。

import numpy as np
from scipy.signal import convolve2d

grid_size = (7, 7)
n_bombs = 5

bomb_mat = np.zeros(grid_size, dtype=int)
bomb_mat[np.random.randint(low=1, high=grid_size[0]-1, size=n_bombs),
         np.random.randint(low=1, high=grid_size[1]-1, size=n_bombs)] = 1
# array([[0, 0, 0, 0, 0, 0, 0],
#        [0, 0, 0, 0, 1, 0, 0],
#        [0, 0, 1, 0, 0, 0, 0],
#        [0, 1, 1, 0, 0, 0, 0],
#        [0, 0, 0, 0, 0, 0, 0],
#        [0, 0, 1, 0, 0, 0, 0],
#        [0, 0, 0, 0, 0, 0, 0]])

sol_mat = convolve2d(bomb_mat, np.ones((3, 3)), mode='same').astype(int)
sol_mat[bomb_mat.astype(bool)] = 10
# array([[ 0,  0,  0,  1,  1,  1,  0],
#        [ 0,  1,  1,  2, 10,  1,  0],
#        [ 1,  3, 10,  3,  1,  1,  0],
#        [ 1, 10, 10,  2,  0,  0,  0],
#        [ 1,  3,  3,  2,  0,  0,  0],
#        [ 0,  1, 10,  1,  0,  0,  0],
#        [ 0,  1,  1,  1,  0,  0,  0]])

您可以使用np.tril()np.triu()获取数组的上下三角形。通过使用条件建立布尔三角形的交集,sol_mat == 0您可以获得所需的索引:

lower0 = np.logical_and(np.tril(np.ones(grid_size)), sol_mat == 0)
# lower0.astype(int)
# array([[1, 0, 0, 0, 0, 0, 0],
#        [1, 0, 0, 0, 0, 0, 0],
#        [0, 0, 0, 0, 0, 0, 0],
#        [0, 0, 0, 0, 0, 0, 0],
#        [0, 0, 0, 0, 1, 0, 0],
#        [1, 0, 0, 0, 1, 1, 0],
#        [1, 0, 0, 0, 1, 1, 1]])
upper0 = np.logical_and(np.triu(np.ones(grid_size)), sol_mat == 0)
# upper0.astype(int)
# array([[1, 1, 1, 0, 0, 0, 1],
#        [0, 0, 0, 0, 0, 0, 1],
#        [0, 0, 0, 0, 0, 0, 1],
#        [0, 0, 0, 0, 1, 1, 1],
#        [0, 0, 0, 0, 1, 1, 1],
#        [0, 0, 0, 0, 0, 1, 1],
#        [0, 0, 0, 0, 0, 0, 1]])

您可以通过以下命令获取这些数组的索引np.nonzero()

lower0_idx = np.array(np.nonzero(lower0))
# array([[0, 1, 4, 5, 5, 5, 6, 6, 6, 6],
#        [0, 0, 4, 0, 4, 5, 0, 4, 5, 6]])
upper0_idx = np.array(np.nonzero(upper0))
# array([[0, 0, 0, 0, 1, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6],
#        [0, 1, 2, 6, 6, 6, 4, 5, 6, 4, 5, 6, 5, 6, 6]])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算二维数组中的值并返回坐标

来自分类Dev

R中的二维数组列表上的矩阵乘法

来自分类Dev

在二维数组中获取二维数组的列表并将非零值作为单个数组中的值

来自分类Dev

检查二维数组中的值是否为空

来自分类Dev

PHP 二维数组:根据二维数组中的值使用户输入 2 减去用户输入 1

来自分类Dev

如何从python中的列表创建矩阵或二维列表?

来自分类Dev

如何跟踪和查找二维数组中的坐标

来自分类Dev

二维数组中的坐标接近度

来自分类Dev

如何跟踪和查找二维数组中的坐标

来自分类Dev

获取二维数组中邻居的坐标

来自分类Dev

将零放在 Python 中二维数组的给定索引值中

来自分类Dev

如何在二维 numpy 数组中居中非零值?

来自分类Dev

如何在Python中输入矩阵(二维列表)?

来自分类Dev

在 Python 中创建二维矩阵列表

来自分类Dev

在 C 中对二维数组(矩阵)进行排序

来自分类Dev

在 SystemVerilog 中制作二维数组/矩阵

来自分类Dev

在 numpys pandas 中按二维数组分组

来自分类Dev

根据值对二维数组排序

来自分类Dev

如何使用awk从文件中读取矩阵并将其分配给bash脚本中声明的二维数组

来自分类Dev

根据二维数组中的输入获取值

来自分类Dev

根据二维数组中innerarray的值删除outerarray的元素

来自分类Dev

如何在Java中获取二维数组列表的最大值/最小值

来自分类Dev

如何动态获取二维数组中的位置

来自分类Dev

查找二维数组中数字的位置

来自分类Dev

算法在蜗牛二维数组中查找数字位置

来自分类Dev

在Java中,我如何采取二维数组的值,并将其存储在另一个二维数组不同的行和列的大小?

来自分类Dev

根据给定的坐标填充二维Numpy数组

来自分类Dev

二维数组中的最大值(处理中)

来自分类Dev

在C ++中访问二维指针数组中的值

Related 相关文章

  1. 1

    计算二维数组中的值并返回坐标

  2. 2

    R中的二维数组列表上的矩阵乘法

  3. 3

    在二维数组中获取二维数组的列表并将非零值作为单个数组中的值

  4. 4

    检查二维数组中的值是否为空

  5. 5

    PHP 二维数组:根据二维数组中的值使用户输入 2 减去用户输入 1

  6. 6

    如何从python中的列表创建矩阵或二维列表?

  7. 7

    如何跟踪和查找二维数组中的坐标

  8. 8

    二维数组中的坐标接近度

  9. 9

    如何跟踪和查找二维数组中的坐标

  10. 10

    获取二维数组中邻居的坐标

  11. 11

    将零放在 Python 中二维数组的给定索引值中

  12. 12

    如何在二维 numpy 数组中居中非零值?

  13. 13

    如何在Python中输入矩阵(二维列表)?

  14. 14

    在 Python 中创建二维矩阵列表

  15. 15

    在 C 中对二维数组(矩阵)进行排序

  16. 16

    在 SystemVerilog 中制作二维数组/矩阵

  17. 17

    在 numpys pandas 中按二维数组分组

  18. 18

    根据值对二维数组排序

  19. 19

    如何使用awk从文件中读取矩阵并将其分配给bash脚本中声明的二维数组

  20. 20

    根据二维数组中的输入获取值

  21. 21

    根据二维数组中innerarray的值删除outerarray的元素

  22. 22

    如何在Java中获取二维数组列表的最大值/最小值

  23. 23

    如何动态获取二维数组中的位置

  24. 24

    查找二维数组中数字的位置

  25. 25

    算法在蜗牛二维数组中查找数字位置

  26. 26

    在Java中,我如何采取二维数组的值,并将其存储在另一个二维数组不同的行和列的大小?

  27. 27

    根据给定的坐标填充二维Numpy数组

  28. 28

    二维数组中的最大值(处理中)

  29. 29

    在C ++中访问二维指针数组中的值

热门标签

归档