Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 是一种将长单元格字符数据快速转换为数字矩阵的方法吗?_Matlab - Fatal编程技术网

Matlab 是一种将长单元格字符数据快速转换为数字矩阵的方法吗?

Matlab 是一种将长单元格字符数据快速转换为数字矩阵的方法吗?,matlab,Matlab,下面是描述我的问题的示例代码 ff= [{'1 2 3 4 5'};{'2 2 3 4 2'};{'3 2 3 4 3'};{'4 2 3 4 4'}]; YY=[]; for i=1:length(ff) xx=str2num(ff{i,1}); YY=[YY;xx]; end 与示例代码类似,我的ff length的实际长度非常大,完成转换需要更长的时间。有没有办法让它更快 您的解决方案会特别慢,因为每次通过for循环都会不断扩展YY的大小 为了优化这一点,您可以首先使用s

下面是描述我的问题的示例代码

ff= [{'1 2 3 4 5'};{'2 2 3 4 2'};{'3 2 3 4 3'};{'4 2 3 4 4'}];
YY=[];
for i=1:length(ff)
    xx=str2num(ff{i,1});
    YY=[YY;xx];
end

与示例代码类似,我的ff length的实际长度非常大,完成转换需要更长的时间。有没有办法让它更快

您的解决方案会特别慢,因为每次通过for循环都会不断扩展
YY
的大小

为了优化这一点,您可以首先使用
strjoin
将字符串的单元格数组转换为一个长字符串。然后您可以一次对整个字符串应用
str2num
,并重新塑造结果

YY = reshape(str2num(strjoin(ff)), [], numel(ff)).'

%   1   2   3   4   5
%   2   2   3   4   2
%   3   2   3   4   3
%   4   2   3   4   4
如果您的MATLAB版本没有strjoin,您可以用sprintf

YY = reshape(str2num(sprintf('%s ', ff{:})), [], numel(ff)).';
另一种选择是使用
cellfun
num2str
将单元格数组的每个条目转换为数字,然后沿第一个维度连接结果

values = cellfun(@num2str, ff, 'UniformOutput', false);
YY = cat(1, values{:});

第一个选项的速度大约是两倍,因为只调用一次
num2str
,并且存储由
strjoin
创建的临时字符串所需的内存将小于存储与数字数据类型相同的数据所需的空间(
double
).

您的解决方案会特别慢,因为每次通过for循环都会不断扩展
YY
的大小

为了优化这一点,您可以首先使用
strjoin
将字符串的单元格数组转换为一个长字符串。然后您可以一次对整个字符串应用
str2num
,并重新塑造结果

YY = reshape(str2num(strjoin(ff)), [], numel(ff)).'

%   1   2   3   4   5
%   2   2   3   4   2
%   3   2   3   4   3
%   4   2   3   4   4
如果您的MATLAB版本没有strjoin,您可以用sprintf

YY = reshape(str2num(sprintf('%s ', ff{:})), [], numel(ff)).';
另一种选择是使用
cellfun
num2str
将单元格数组的每个条目转换为数字,然后沿第一个维度连接结果

values = cellfun(@num2str, ff, 'UniformOutput', false);
YY = cat(1, values{:});
第一个选项的速度大约是两倍,因为只调用一次
num2str
,并且存储由
strjoin
创建的临时字符串所需的内存将小于存储与数字数据类型相同的数据所需的空间(
double