用矢量化方式MATLAB将数组内容复制到单元格

时间:2016-11-05 01:41:09

标签: arrays matlab vectorization cell-array

我有一个nx3数组A。我想创建一个单元格B,以便:

for i=1:size(A,1)
    B{i}=A(i,:);
end

我是否可以在没有for循环的情况下以矢量化的方式执行此操作,或者在Matlab中以更快的速度执行此操作?

修改

这个问题出现在我身上,因为我想在A的每一行调用一个函数。该函数仅输出标量。所以,一旦我形成B,我就可以致电cellfun

C=cellfun(@func,B)

我这样做了。 for循环似乎仍然更好。

b=rand(1000000,15);
tic
for i=1:size(b,1)
    f{i}=b(i,:);
end
toc

tic
e=mat2cell(b, ones([1 size(b,1)]), [ size(b,2) ]);
toc

OUTPUT:
Elapsed time is 1.386777 seconds.
Elapsed time is 2.237526 seconds.

2 个答案:

答案 0 :(得分:0)

您可以使用mat2cell来设置单元格矩阵B,然后您可以将B的行调用到cellfun

答案 1 :(得分:0)

尝试使用mat2cell函数:

B=mat2cell(A, ones(1, size(A,1)), size(A,2));