Matlab中矩阵与数组的组合
我有一个矩阵d,它的维数是2x2x1000Matlab中矩阵与数组的组合,matlab,matrix,vector,Matlab,Matrix,Vector,我有一个矩阵d,它的维数是2x2x1000 d(:,:,1)= [ a1 b1 c1 d1] d(:,:,2)= [ a2 b2 c2 d2] 我有一个数组u1x1000 u=[u1 u2 ... u1000] . 我想创建一个矩阵M,其中M的每个元素等于矩阵d中的一个元素,在U向量中对应的元素处升高 M = [ a1^u1*a2^u2*...a1000^u1000 b1^u1*b2^u2*...b1000^u1000
d(:,:,1)= [ a1 b1
c1 d1]
d(:,:,2)= [ a2 b2
c2 d2]
我有一个数组u1x1000
u=[u1 u2 ... u1000] .
我想创建一个矩阵M,其中M的每个元素等于矩阵d中的一个元素,在U向量中对应的元素处升高
M = [ a1^u1*a2^u2*...a1000^u1000 b1^u1*b2^u2*...b1000^u1000
c1^u1*c2^u2*...c1000^u1000 d1^u1*d2^u2*...d1000^u1000 ]
我试着写下这段代码:
n_length =2
for k=1:length(d)
for i = 1:n_length
for j = 1:n_length
M(i,j)= prod(d(i,j,k)^u(1,k));
end
end
end
但有点不对劲。虽然没有错误,但输出不符合预期。我认为我在实现上述等式时犯了一个错误。谁能帮我用上面的方法把d和U结合起来 以下是您的解决方案:
为要执行的操作编写通用函数。
例如:
现在您知道矩阵的第三维匹配(均为1000),bsxfun将为1000个元素中的每一个运行该函数(2x2矩阵d,vs单值U)
您可以使用执行从d
到u
的元素级功率计算,然后使用prod
减少到2D
,如下所示-
prod(bsxfun(@power,d,permute(u,[1,3,2])),3)
样本运行-
>> d
d(:,:,1) =
0.3000 0.2000
0.4000 0.5000
d(:,:,2) =
0.6000 0.2000
0.3000 0.5000
d(:,:,3) =
0.4000 0.3000
0.7000 0.2000
>> u
u =
2 3 2
>> 0.3^2*0.6^3*0.4^2 % First output elem
ans =
0.0031
>> 0.5^2*0.5^3*0.2^2 % Last output elem
ans =
0.0013
>> prod(bsxfun(@power,d,permute(u,[1,3,2])),3)
ans =
0.0031 0.0000
0.0021 0.0013
“有错误”请包括完整的错误描述。谢谢,但我只想得到一个最终合并的M矩阵,大小为(2x2)。不是1000个大小为(2x2)的矩阵。
prod(bsxfun(@power,d,permute(u,[1,3,2])),3)
>> d
d(:,:,1) =
0.3000 0.2000
0.4000 0.5000
d(:,:,2) =
0.6000 0.2000
0.3000 0.5000
d(:,:,3) =
0.4000 0.3000
0.7000 0.2000
>> u
u =
2 3 2
>> 0.3^2*0.6^3*0.4^2 % First output elem
ans =
0.0031
>> 0.5^2*0.5^3*0.2^2 % Last output elem
ans =
0.0013
>> prod(bsxfun(@power,d,permute(u,[1,3,2])),3)
ans =
0.0031 0.0000
0.0021 0.0013