如何在 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
参数对)
我在 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
参数对)