我想为单元格数组的每个元素分配一个取决于单元格索引的内容。
示例:包含单元格索引的字符串
使用for循环执行此操作的方法是
for ind=1:10
my_cell_array{ind}=['string' num2str(ind)];
end
有没有办法使用cellfun或匿名函数句柄对它进行矢量化?
我刚刚学会了这些matlab技巧,但我仍然不擅长使用它们,任何建议都会非常感激并且有助于学习
答案 0 :(得分:1)
您可以将sprintf
与%d
一起使用。要将其分隔为单元格,请在末尾添加一个空格,然后strsplit
:
my_cell_array=strsplit(sprintf('string%d ',1:10))
答案 1 :(得分:1)
为了完整性,以下向量化解决方案产生前导零,在某些情况下可能是理想的:
N = 10; % length
str = 'string'; % string
my_cell_array = cellstr(strcat(str, dec2base(1:N, 10)));
由于您想知道如何使用cellfun
(在这种情况下arrayfun
更适合):以下产生与您的代码相同的结果,而不带前导零:
my_cell_array = arrayfun(@(x) [str num2str(x)], 1:N, 'UniformOutput', false);
但请注意,arrayfun
/ cellfun
不是矢量化。它们与显式循环具有或多或少相同的性能。