小编use*_*337的帖子

Matlab - bsxfun不再比repmat快吗?

我正在尝试找到在Matlab中标准化矩阵的最快方法(零均值,单位方差列).这一切都归结为将相同操作应用于矩阵中所有行的最快方法.我读过的每篇文章都得出了相同的结论:使用bsxfun而不是repmat.本文由Mathworks编写,是一个例子:http://blogs.mathworks.com/loren/2008/08/04/comparing-repmat-and-bsxfun-performance/

但是,在我自己的计算机上尝试这个时,repmat总是更快.以下是我使用与文章中相同代码的结果:

m = 1e5;
n = 100;
A = rand(m,n);

frepmat = @() A - repmat(mean(A),size(A,1),1);
timeit(frepmat)

fbsxfun = @() bsxfun(@minus,A,mean(A));
timeit(fbsxfun)
Run Code Online (Sandbox Code Playgroud)

结果:

ans =

    0.0349


ans =

    0.0391
Run Code Online (Sandbox Code Playgroud)

事实上,无论输入矩阵有多小或多大,我都无法在这种情况下使bsxfun表现得比repmat更好.

有人可以解释一下吗?

arrays matlab bsxfun

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

给定2个非负数阵列,找到最小的乘积和

给定两个阵列AB各含有n非负数,除去a>0从A的端部元件和b>0从B的端部元件评估这样的操作的成本,X*Y其中X是的总和a从删除的元素AY所述的总和b元件从...删除B.继续这样做直到两个数组都为空.目标是最小化总成本.

使用动态编程以及最优策略始终只从一个元素中获取一个元素的事实,A或者B我可以找到O(n ^ 3)解决方案.现在我很想知道这个问题是否有更快的解决方案?

编辑:在评论中窃取@recursive的一个例子:

A = [1,9,1],B = [1,9,1].可能与20的成本有关.(1)*(1 + 9)+(9 + 1)*(1)

algorithm dynamic-programming

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

在 matlab 等高线图中选择特定水平

我生成了这个,用于测试等值线图在 matlab 上的工作原理。我想弄清楚是否有一种方法可以只绘制其中一条线,但不一定是第一条线。

Matlab 的解释是,如果你这样做:

 contour(X,Y,Z,1);
Run Code Online (Sandbox Code Playgroud)

它会绘制其中一条线,但它始终是第一条线,但对于我的特殊情况,我想要第三条或第四条线。有没有办法在Matlab中做到这一点?

matlab plot matlab-figure

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