5

我确定有办法做到这一点,但我不知道它是什么。

假设我有一个向量

v = [1.02 2.03 3.04];

我想使用每个元素的格式字符串将其转换为元胞数组:

'   %.3f'

(%.3f 前 3 个空格)

我怎样才能做到这一点?我尝试了以下方法,但出现错误:

>> f1 = @(x) sprintf('   %.3f',x);
>> cellfun(f1, num2cell(v))
??? Error using ==> cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.
4

3 回答 3

6

如错误中所述,只需提供UniformOutputas的参数即可false

cellfun(f1, num2cell(v), 'UniformOutput', false)

ans = 

    '   1.020'    '   2.030'    '   3.040'
于 2012-05-30T14:16:06.347 回答
2

这是另一个解决方案:

>> v = [1.02 2.03 3.04];
>> strcat({'   '}, num2str(v(:),'%.3f'))
ans = 
    '   1.020'
    '   2.030'
    '   3.040'

显然,如果你想要一个行向量,你可以转置结果。

于 2012-05-30T15:03:04.060 回答
1

您还可以使用以下{}语法:

 cellfun(@(x){f1(x)}, num2cell(v)) 

另请查看:在数组上应用一个函数,以向量化方式返回不同大小的输出

于 2012-05-30T21:00:14.890 回答