相关疑难解决方法(0)

在Matlab中,何时使用bsxfun是最佳的?

我的问题:我注意到很多关于SO的Matlab问题的好答案经常使用这个功能bsxfun.为什么?

动机:在Matlab文档中bsxfun,提供了以下示例:

A = magic(5);
A = bsxfun(@minus, A, mean(A))
Run Code Online (Sandbox Code Playgroud)

当然我们可以使用以下方法执行相同的操作:

A = A - (ones(size(A, 1), 1) * mean(A));
Run Code Online (Sandbox Code Playgroud)

事实上,简单的速度测试表明第二种方法的速度提高了约20%.那么为什么要使用第一种方法?我猜测在某些情况下使用bsxfun将比"手动"方法快得多.我真的很想看到这种情况的一个例子,并解释为什么它更快.

此外,这个问题的最后一个元素,再次来自Matlab文档bsxfun:"C = bsxfun(fun,A,B)将函数句柄fun指定的逐元素二元运算应用于数组A和B,使用单例扩展已启用." 短语"启用单例扩展"是什么意思?

arrays matlab bsxfun

132
推荐指数
5
解决办法
3万
查看次数

如何从MATLAB中的给定输入数据生成以下矩阵和向量?

假设我有输入data = [1 2 3 4 5 6 7 8 9 10]num = 4.我想用这些来生成以下内容:

i = [1 2 3 4 5 6; 2 3 4 5 6 7; 3 4 5 6 7 8; 4 5 6 7 8 9]
o = [5 6 7 8 9 10]
Run Code Online (Sandbox Code Playgroud)

这基于以下逻辑:

length of data = 10
num = 4
10 - 4 = 6
i = [first 6; second 6;... num times]
o = [last 6]
Run Code Online (Sandbox Code Playgroud)

在MATLAB中自动执行 …

matlab vector matrix

5
推荐指数
1
解决办法
311
查看次数

定期从矢量构造矩阵

我有一个b包含30个条目的向量.

我想避免使用for循环来构造这样的矩阵:

在此输入图像描述

其中b_ii向量的第n个条目b.

例如,定义向量

b = [2 6 -7 3 1 -4 -1  1 11  8 -4  9  2  0  2 -1  0  4  4  4  2 -4  2  5  1 3  2 -1  1 -2]
Run Code Online (Sandbox Code Playgroud)

我尝试使用for循环的地方是:

A = zeros(5,5);
for i = 1:5
    A(i) = b(i+5);
    A(i+5) = b(i+6);
    A(i+10) = b(i+7);
    A(i+15) = b(i+8);
    A(i+20) = b(i+9);
end
Run Code Online (Sandbox Code Playgroud)

结果是

在此输入图像描述

有没有更快更通用的方法来生成这个矩阵?

matlab matrix vectorization

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

标签 统计

matlab ×3

matrix ×2

arrays ×1

bsxfun ×1

vector ×1

vectorization ×1