将3维numpy数组压缩为2维

时间:2018-11-02 00:43:33

标签: python arrays numpy

我正在尝试用两个numpy数组进行矩阵乘法,一个是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)”

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

代码存在问题

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

这告诉numpy您要堆叠2个10 x 1数组,因此产生2 x 1 x10。不包括内支架,则产生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)

答案 1 :(得分:0)

QW 维度导致的问题你可以试试这个

QW = np.multiply(QW, np.exp(-(pi/4) * 1j)).reshape(2,2,1)