小编sha*_*ant的帖子

3D矢量矩阵乘法

这让我感到困扰:

假设你有一个有三层的矩阵.

是否有一种简单的方法将此矩阵与三个元素的向量相乘,以便第一层(所有元素)与向量的第一个元素相乘,依此类推......

现在我必须使用一个函数来这样做:

function out=fun(matrix,vector)

out=matrix;
for k=1:3
    out(:,:,k)=out(:,:,k)*vector(k);
end
Run Code Online (Sandbox Code Playgroud)

是否有一种有效的方法可以在一行中完成此操作而无需功能?

matlab vector matrix

10
推荐指数
1
解决办法
7937
查看次数

缓慢的匿名功能

假设你有一个50000次迭代的循环,并希望从很多矩阵中计算平均值(标量).这不完整,但大致如下:

for k=1:50000
...
mean=sum(sum(matrix))/numel(matrix); %Arithmetic mean
...
end
Run Code Online (Sandbox Code Playgroud)

现在想要包括不同的均值方程式可供选择.首先我尝试了这个:

average='arithmetic'
for k=1:50000
...
switch average
    case 'arithmetic'
        mean=sum(sum(matrix))/numel(matrix); %Arithmetic mean
    case 'geometric'
        mean=prod(prod(matrix)).^(1/numel(matrix)); %Geometric mean
    case 'harmonic'
        mean=numel(matrix)/sum(sum(1./matrix)); %Harmonic mean
end
...
end
Run Code Online (Sandbox Code Playgroud)

这显然比第一个循环慢很多,因为它需要为每次迭代找到匹配的字符串,感觉真的没必要.然后我尝试了这个:

average='arithmetic'
switch average
    case 'arithmetic'
        eq=@(arg)sum(sum(arg))/numel(arg); %Arithmetic mean
    case 'geometric'
        eq=@(arg)prod(prod(arg)).^(1/numel(arg)); %Geometric mean
    case 'harmonic'
        eq=@(arg)numel(arg)/sum(sum(1./arg)); %Harmonic mean
end

for k=1:50000
...
mean=eq(matrix); %Call mean equation
...
end
Run Code Online (Sandbox Code Playgroud)

这仍然是第一个循环的两倍慢,我不明白为什么.最后两个循环的速度几乎相似.

我在这里做错了吗?如何通过这个额外功能实现与第一个循环相同的性能?

非常感谢帮助!

performance matlab anonymous-function

6
推荐指数
2
解决办法
740
查看次数

标签 统计

matlab ×2

anonymous-function ×1

matrix ×1

performance ×1

vector ×1