Как я могу использовать это комплексное число в матрице numpy?

#python #numpy #matrix #complex-numbers

Вопрос:

Вот код на Python, над которым я работаю:

 def inver_hopf(x,y,z):
    return (1/np.sqrt(x**2 y**2 (1 z)**2))*np.matrix([[1 z],[x y.j]],dtype=complex)
 

Проблема возникает там [x y.j] , где j означает сложный блок. Он возвращает мне сообщение об ошибке AttributeError: 'int' object has no attribute 'j' . Если я удалю точку, она вернется NameError: name 'yj' is not defined . Как я могу это исправить? Спасибо!

Ответ №1:

j только переменная, вы можете получить комплексное число, введя 1j

Ответ №2:

Вместо того, чтобы пытаться использовать x y переменные и для записи комплексного числа напрямую, попробуйте передать его в complex класс. Пример:

 def inver_hopf(x, y):
    return np.matrix([complex(x, y)], dtype=complex)
 

Ответ №3:

Это зависит от того, что вы хотите заархивировать с помощью своего кода.

В общем случае, написав y.j ( object.attribute ), вы хотите получить доступ к атрибуту указанного объекта. В вашем случае атрибут j объекта y ( int в вашем примере).

Если я вас правильно понимаю, вы хотите иметь матрицу, первая запись в которой является чисто реальной со значением 1 z , а вторая запись-чисто воображаемой x y . Чтобы получить это, вам нужно умножить чистую реальную сумму x y на j .

Что привело бы к:

 def inver_hopf(x,y,z):
    return (1/np.sqrt(x**2 y**2 (1 z)**2))*np.matrix([[1 z],[(x y)*1j]],dtype=complex)