Конденсация трехмерного массива в двумерный - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь выполнить матричное умножение с двумя массивами-пустышками, один - 2x2, а другой - 2x1, но есть третье измерение из-за переменной linspace. Это делает невозможным применение преобразования, как я намереваюсь

код:

import numpy as np 
t = 0
delt = 0
theta = 0
n = np.linspace(0,1,0.1)
E_z = np.exp((t - n) * 1j)
E_y = np.exp((t - n - delt) * 1j)
QW = np.array([[np.cos(theta)**2 + 1j * np.sin(theta)**2, (1 - 1j) * np.sin(theta) * np.cos(theta)], 
                  [1j * np.cos(theta)**2 + np.sin(theta)**2, (1 - 1j) * np.sin(theta) * np.cos(theta)]])
QW = np.multiply(QW, np.exp(-(pi/4) * 1j))
E = np.array([[E_y],[E_z]])
E = np.dot(QW, E)

Получена ошибка

"ValueError: формы (2,2) и (2,1,14) не выровнены: 2 (dim 1)! = 1 (dim 1)"

Спасибо за помощь!

1 Ответ

0 голосов
/ 02 ноября 2018

Проблема с кодом в строке

E = np.array([[E_y],[E_z]])

Это говорит numpy о том, что вы хотите сложить 2 10 x 1 массива, что приводит к получению 2 x 1 x 10. Отсутствие внутренних скобок приводит к массиву 2 x 10. Для дальнейшего использования метод .squeeze может использоваться для удаления внутренних размеров 1.

import numpy as np 
t = 0
delt = 0
theta = 0
n = np.arange(0,1,0.1)
E_z = np.exp((t - n) * 1j)
E_y = np.exp((t - n - delt) * 1j)
QW = np.array([[np.cos(theta)**2 + 1j * np.sin(theta)**2, (1 - 1j) * np.sin(theta) * np.cos(theta)], 
                  [1j * np.cos(theta)**2 + np.sin(theta)**2, (1 - 1j) * np.sin(theta) * np.cos(theta)]])
QW = np.multiply(QW, np.exp(-(np.pi/4) * 1j))
E = np.array([E_y,E_z])
E = np.dot(QW, E)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...