假设我们有一个向量:
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个元素的向量。 什么是最好的解决方法?
答案 0 :(得分:4)
您可以使用arrayfun
和cellfun
解决此问题:
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)
玩矢量化很有趣!