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
)