如何在 MATLAB 中将元胞数组转换为数值数组?

How can I convert a cell array into a numeric array in MATLAB?

我在 MATLAB 中遇到了一个本应很简单的问题。我有一个 1x43 元胞数组,如下所示(注意每个值前的 space):

labels = {' 1', ' 2', ' 3', ... , ' 43'};

我只想将其转换为 1x43 维的数字向量,如下所示:

labels_numeric = [1 2 3 ... 43];

谁能告诉我正确的技巧?

您可以collect the individual character arrays into a single character array, then use str2num转换它:

labels_numeric = str2num([labels{:}]);

或者更简单,只需使用 str2double:

labels_numeric = str2double(labels);

gnovice 的答案是针对这个特定问题的最简单的解决方案,但一般来说,如果您想通过对每个元素应用一些转换将元胞数组转换为数字数组,您可以使用 cellfun 来实现。例如,如果您向 MATLAB 询问 length({'apple' 'orange' 'banana'}),您将得到 3,但如果您想要数组中每个字符串的长度,您可以这样做:

>> cellfun(@length, {'apple' 'orange' 'banana'})

ans =

     5     6     6

您可以使用匿名函数或已定义函数的句柄作为 cellfun 的参数,因此转换可以根据需要进行复杂化。

只要函数的结果是标量数值或逻辑值,cellfun 的输出就会是数值或逻辑数组;否则它将是另一个元胞数组(如果它的大小不同,您将需要使用 'UniformOutput', false 参数对)