Определить, существуют ли какие-либо комплексные числа в матрице

#python #python-3.x #list #matrix #nested-for-loop

#python #python-3.x #Список #матрица #вложенный для цикла

Вопрос:

Я пишу функцию, чтобы определить, являются ли элементы матрицы сложными. Я ожидаю, что функция вернет либо a True , либо 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 . Что я могу улучшить в своем коде здесь?

Комментарии:

1. Рассмотрите возможность использования numpy.iscomplex() для ускорения

Ответ №1:

Логика здесь излишняя. Если ваша матрица всегда 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
 

Комментарии:

1. Верный путь! Спасибо