1

我正在编写一个函数来确定矩阵的元素是否复杂。我希望该函数返回 aTrue或 a False。我有这段代码,但似乎没有按预期工作:

def confirm_matrix(M):
    row_1_length = len(M[0])
    if len(M)>0:
        for row in M:
            if type(row) is not list or tuple:
                return False
            for row in M[1:]:
                if len(row)!= row_1_length:
                    return False
                for row in M:
                    for element in row:
                        try:
                            isinstance(element, complex) == True
                            return True
                        except:
                            return False
confirm_matrix([[1j,1j],[2j,2j]])

我希望得到一个True,但这给了False. 我可以在这里的代码中改进什么?

4

1 回答 1

3

这里的逻辑是多余的。如果您的矩阵始终是 2d,您可以迭代行和列并将生成器传递给any

>>> M = [[1j,1j],[2j,2j]]
>>> any(isinstance(x, complex) for row in M for x in row)
True
>>> M = [[1,1],[2,2]]
>>> any(isinstance(x, complex) for row in M for x in row)
False

如果您使用的是numpy,np.iscomplex()那么要走的路:

>>> a = np.array([[1+1j, 1+0j], [4.5, 3]])
>>> np.iscomplex(a).any()
True
于 2021-02-28T21:29:39.420 回答