当前位置: 首页 > 知识库问答 >
问题:

Numpy:多维数组的真值比较

赵灼光
2023-03-14

因此,我正在编写一个数独解算器,使用9x9数组作为网格,使用9x9x9数组作为其可能性。由于我使用的回溯算法,我必须检查数独是否仍然有效,又名:

如果有一个字段不包含数字,并且没有剩余的可能性,则返回False。到目前为止,我实现了以下几点:

    for j in range(9):
        for i in range(9):
            if puzzle[j,i] == 0 and (solving[j,i] == 0).sum() == 9:
                return False
    return True

例如,如果(j,i)处的正方形包含选项2、3和7,则相应的可能性数组为:

    solving[j,i] = array([0, 2, 3, 0, 0, 0, 7, 0, 0], dtype = int8)

我试图在求解器中避免这样的循环。我尝试如下:

    solving[where(puzzle == 0)]

这返回了一个nx9数组,其中n是我的拼图中的空方块数。如果形状为1x9的n个数组中的任何一个正好等于

    array([0,0,0,0,0,0,0,0,0], dtype = int8)

但是,我在包括. any()和. all()实验在内的各种尝试中没有任何成功。这是我使用的最新代码:

    def is_valid(self, puzzle, solving):
        if (solving[py.where(puzzle == 0)].all() == 0).sum() > 0:
            return False
        return True

... 它总是返回False。正确的编码方式是什么?

共有1个答案

贺景胜
2023-03-14

我认为以下是您要做的检查:

np.all(puzzle | np.any(solving, axis=-1)

如果所有单元格都分配了一个值(拼图),或者(|)在求解中至少有一个非零条目,则返回Truenp.any(求解,轴=-1))。

 类似资料:
  • 问题内容: numpy中最简单的方法来反转数组的最内部值是这样的: 这样我得到以下结果: 非常感谢你! 问题答案: 怎么样: 而最后一个维度的反方向是: 要么 尽管我更喜欢后者,因为前两个维度是隐式的,因此很难看到正在发生的事情。

  • 我正在优化反向传播算法的实现,以训练神经网络。我正在研究的一个方面是在数据点集(输入/输出向量)上执行矩阵运算,这是一个由numpy库优化的批处理过程,而不是遍历每个数据点。 在我的原始算法中,我做了以下操作: 然后,我将所述矩阵扩展为张量,其中第一个形状索引将引用数据集。如果我有3个数据集(为了简单起见),矩阵将如下所示: 仅使用np.tensordot或其他numpy操作,如何生成C? 我想答

  • 问题内容: 请原谅我这是多余的还是超基本的。我要从R进入Python / Numpy,并且很难在脑海里翻转事物。 我有一个维数组,我想使用索引值的另一个n维数组进行排序。我知道我可以将其包装成一个循环,但是似乎应该有一种非常简洁的Numpyonic方式将其击败并提交。这是设置n = 2的问题的示例代码: 所以现在我有一个2 x 5的随机数数组和2 x 5的索引。我已经阅读了约10次帮助,但显然我的

  • 问题内容: 如何比较php中的多维数组?有没有简单的方法? 问题答案: 我知道的最简单的方法是: 请注意,您也可以使用。它们之间的区别是: 使用 Double equals时 ,顺序很重要: 对于 Triple equals ,类型很重要:

  • 问题内容: 我有一个二维数组,即序列数组也是数组。对于每个序列,我想计算自相关,因此对于(5,4)数组,我将获得5个结果或维度为(5,7)的数组。 我知道我可以循环浏览第一个维度,但这很慢,也是我的最后选择。还有另一种方法吗? 谢谢! 编辑: 根据选择的答案以及mtrw的评论,我具有以下功能: 请注意,在我的代码中,length是一个全局变量,因此一定要声明它。我也没有将结果限制为实数,因为我还需

  • 问题内容: 当我在大学时使用C ++时,我被告知要尽可能使用多维数组(因此称为MDA),因为它以较大的块分配,因此具有更好的内存局部性。另一方面,阵列数组(AoA)被分配为多个较小的块,可能分散在物理内存中发现空缺的所有位置。 所以我想第一个问题是:这是神话,还是值得遵循的建议? 假设是后者,那么下一个问题将是在没有真正MDA的Java之类的语言中做什么。当然,用1DA模拟MDA并不难。本质上,具