在Matlab中将矩阵与数组相结合

时间:2017-04-25 08:44:03

标签: matlab matrix vector

我有一个矩阵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吗?

2 个答案:

答案 0 :(得分:2)

您可以使用bsxfun执行du的元素功率计算,然后使用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);