将函数应用于向量的每个元素,避免使用for循环

时间:2016-08-05 17:28:25

标签: matlab

我在Matlab中有一个向量x = [10,20,30,40],现在我想将y = rand(m,1)应用于x中的每个元素,即生成:

y1 = rand(x(1),1);
y2 = rand(x(2),1);
y3 = rand(x(3),1);
y4 = rand(x(4),1);

直接的方法是应用for循环,但正如我们所知,for循环在Matlab中效率不高。那么还有其他方法吗?

后续处理: 在Matlab中向向量中的每个元素应用函数似乎是一个非常常见的问题,我们如何处理这种情况并避免使用for循环?

2 个答案:

答案 0 :(得分:0)

创建一个随机向量(ys)它的大小是x个元素的总和,然后定义一个函数来用索引提取每个y:

'["openldap"]["server"]["ROOTDN"] --option'

答案 1 :(得分:0)

首先,要指出明显的。你暗示y将是一个数值数组,但这是不可能的,因为每个元素都有不同的大小。 (例如,y1是10x1,但是y2是20x1)

因此,唯一有意义的输出是您希望y成为 cell 数组。

您可以非常直接地使用arrayfun(或cellfun等)来执行此操作:

>> x = [10, 20, 30, 40]
>> f = @(a) {rand(a, 1)};  % output is a "cell" element
>> y = arrayfun(f, x); % apply 'f' to each element of x: returns a 1x4 cell array