线性间隔的传染媒介传染媒介用不同的步

时间:2013-03-26 21:39:43

标签: matlab vectorization

假设我们有一个向量:

dx = [ 1 10 20 ]

现在我们想要为dx中的每个值生成一个0-100步长的线性间隔向量,以便我们得到类似下面的内容,称之为vals:

vals = 0   0  0
       1  10 20
       2  20 40
       3  30 60
       .  .   .
       .  . 100
       . 100
      100

这样我们就得到了一个不同大小的向量的向量。最终我们要将函数应用于val,然后我们需要总结内部向量,以便结果将是一个包含3个元素的向量。 什么是最好的解决方法?

2 个答案:

答案 0 :(得分:4)

您可以使用arrayfuncellfun解决此问题:

dx = [1 10 20];
vals = arrayfun(@(x)0:x:100, dx, 'UniformOutput', false);

result = cellfun(@(x)sum(someFunction(x)), vals);

其中someFunction是要应用于矢量的函数。

答案 1 :(得分:0)

我将结果放在一个列表中,因为列的大小不同,并且它不适合数组。

dx = [1 10 20];
l = 1 + 100 ./ dx;
% disp(l); % so you can see what the above calculation did
vals = {linspace(0,100,l(1,1))', linspace(0,100,l(1,2))',linspace(0,100,l(1,3))}
% the (') after the linspace() function is a matrix transpose since linspace() returns a row vector
% lists work like matrices except you use list_name{m} as opposed to matrix_name(m,n)

玩矢量化很有趣!