我有一个矩阵d,其尺寸为2 X 2 X 1000
d(:,:,1)= [ a1 b1
c1 d1]
d(:,:,2)= [ a2 b2
c2 d2]
我有一个数组u 1 X 1000
u=[u1 u2 ... u1000] .
我想创建一个矩阵M,其中M的每个元素等于在U向量中对应元素处提升的矩阵d中的矩阵元素。
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吗?
答案 0 :(得分:2)
您可以使用bsxfun
执行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
答案 1 :(得分:1)
以下是您的解决方案:
为您要执行的操作编写通用函数。 例如:
M = bsxfun(@(d,u) myFunction(d,u),d,Ushifted); % U is 2X2X1000
M = prod(M,3); % computes the product on the third dimension (1000)
现在你的矩阵的第三维匹配(均为1000),bsxfun将为1000个元素中的每一个运行函数(d的2x2矩阵,与U的单个值)。
stream.AuthenticateAsClient (Configuration.Host, certificates, System.Security.Authentication.SslProtocols.Tls, false);