#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)