【问题标题】:How to Check if a Matrix is in a List of Matrices Python如何检查矩阵是否在矩阵列表中 Python
【发布时间】:2019-03-09 06:21:46
【问题描述】:

这是矩阵列表;

[matrix([[1, 0],
         [1, 0],
         [1, 0],
         [1, 0]]),
 matrix([[0, 0, 0, 0],
         [1, 1, 1, 1]]),
 matrix([[0, 1],
         [0, 1],
         [0, 1],
         [0, 1]]),
 matrix([[0, 0, 0, 0],
         [1, 1, 1, 1]]),
 matrix([[1, 1, 1, 1],
         [0, 0, 0, 0]])]

我想检查一个矩阵是否已经在列表示例中;

a = matrix([[0, 0, 0, 1],
            [1, 1, 1, 0]])

所以如果 a 在 m 中,则打印 True,否则打印 False

【问题讨论】:

    标签: python arrays list numpy matrix


    【解决方案1】:

    我假设您正在使用 NumPy。如果是这种情况,不要使用np.matrix,使用np.arraynp.matrix 几乎完全出于遗留原因而存在,并且具有不受欢迎的功能。

    您可以将any 与生成器理解和np.array_equal 一起使用。如果在输入列表中找到数组,这将短路到True,否则返回False

    import numpy as np
    
    L = [np.array([[1, 0], [1, 0], [1, 0], [1, 0]]),
         np.array([[0, 0, 0, 0], [1, 1, 1, 1]]),
         np.array([[0, 1], [0, 1], [0, 1], [0, 1]]),
         np.array([[0, 0, 0, 0], [1, 1, 1, 1]]),
         np.array([[1, 1, 1, 1], [0, 0, 0, 0]])]
    
    A = np.array([[0, 0, 0, 1], [1, 1, 1, 0]])
    
    res = any(np.array_equal(A, i) for i in L)  # False
    

    【讨论】:

    • 谢谢,但我得到这个“ at 0x7fe874754aa0>”
    • 想通了,最后一行代码应该是“res = any([np.array_equal(A, i) for i in L])”
    • 不,res = any(np.array_equal(A, i) for i in L) 应该可以正常工作。不建议使用列表推导,因为它需要先构建 list,这对于此任务不是必需的。
    • 提问者观察到的错误any 输出是使用from numpy import * 的症状,或者隐藏了内置anynumpy.any 的其他东西。这是为什么不使用星号导入的主要示例之一。
    猜你喜欢
    • 2014-05-09
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2015-09-19
    相关资源
    最近更新 更多