我在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
循环?
答案 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