确定矩阵中是否存在复数

Mal*_*ali 2 python list matrix python-3.x nested-for-loop

我正在编写一个函数来确定矩阵的元素是否复杂。我希望该函数返回 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]])
Run Code Online (Sandbox Code Playgroud)

我期望得到 aTrue但这给出了False. 我可以在我的代码中改进什么?

ggo*_*len 5

这里的逻辑太过分了。如果您的矩阵始终是二维的,您可以迭代行和列并将生成器传递给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
Run Code Online (Sandbox Code Playgroud)

如果您使用 numpy,np.iscomplex()则可以这样:

>>> a = np.array([[1+1j, 1+0j], [4.5, 3]])
>>> np.iscomplex(a).any()
True
Run Code Online (Sandbox Code Playgroud)