matlab 操作数无法与形状(2,2)(2,100000)一起广播?

gudnpqoy  于 2022-12-19  发布在  Matlab
关注(0)|答案(1)|浏览(210)

尝试将matlab代码转换为python,并在尝试计算第一个和第二个数据时获得以下错误:

operands could not be broadcast together with shapes (2,2) (2,100000)

当尝试在vsc中重写此matlab代码片段时:
数据=u*(s ^(1/2))*(随机数(2,N数据));数据=数据+Ey;
我已经转换成python的代码是:

Ky11 = 10
Ky22 = 1
rho = 0
Ky12 = np.sqrt(Ky11 * Ky22) * rho
Ky = np.array([[Ky11, Ky12], [Ky12, Ky22]])

Ey1 = 0
Ey2 = 0
Ey = np.array([[Ey1], [Ey2]])

Ndata = 100000

u, s, v = np.linalg.svd(Ky)
# Create a 2x2 diagonal matrix with the singular values of Ky (s) on the diagonal
s_matrix = np.diag(s)

# Compute the square root of each element of s_matrix and then multiply
# with u and np.random.randn(2, Ndata)
# Transpose u so that the dimensions match for element-wise multiplication
data = u.T * np.sqrt(s_matrix) * (np.random.randn(2, Ndata))
data = data + Ey

Ky_estimate = np.cov(data.T)

有谁能帮忙解决吗?
我试着计算s_matrix元素的平方根,然后乘以转置的u,但没有得到我所期望的结果,也就是没有任何错误地运行代码。我用“相同”的问题搜索了其他堆栈溢出页,但没有解决我的问题。

lvmkulzt

lvmkulzt1#

你想做矩阵乘法吗?用@代替*。Python中的大陷阱。运算符*是一个元素接一个元素的乘法。

相关问题