如何在不使用双重for循环的情况下将数值数据放入双数组而不是单元数组中?

时间:2016-01-27 23:20:10

标签: arrays matlab for-loop double cell

我将数据导入为字符串(在单元格数组中)。有些列包含数值,我想将此数值数据放在双数组而不是单元数组中。我通过使用str2double(C)函数成功实现了这一功能,其中C是将10x10单元阵列转换为double类型的10x10数组。现在我想用双数组替换原始的10x10单元阵列(它是一个更大的10x50单元阵列的一部分,称为数据')。以下似乎不起作用:

A = str2double(C);

数据(1:10,1:10)= A;

不是用10x10双阵列替换10x10单元阵列,而是用10x10双阵列替换EACH单元(i,j)。现在我可以正确地使用双循环遍历所有行和列单元格(i,j)并用双数组A(i,j)中的正确元素替换每个元素。

    function dat = tsv2cell(file)
    % Read tsv file into cell array.
    %
    % Syntax:
    %   dat = tsv2cell(file)
    %
    % Input:
    %   file    Name of tsv file, either as complete path, or in the current              %folder.
    %
% Output:
%   dat     Cell array containing the tsv data in rows and columns. Note
%           that each cell contains string data only, numeric data is not
%           made numeric. I.e. '3' is loaded as '3', not as 3.

% Open file
fid = fopen(file);
if fid==-1
    error(['File ' file ' could not be found or opened.']);
end

% Read each line as string (we have to do this as the number of columns is unknown)
dat = textscan(fid, '%s', 'Delimiter', '');

% Close file
fclose(fid);

% Loop over lines and separate at tabs and commas
dat = dat{1};
tab = sprintf('\t');
for i = 1:size(dat,1)
    str = dat{i,1};
    % get indices in str where separators are (tabs and commas)
    ind = [0 strfind(str, ',') strfind(str, tab) length(str)+1];
    ind = sort(ind); % sort before looping
    for j = 1:length(ind)-1
        dat{i,j} = str(ind(j)+1:ind(j+1)-1);
    end
end

这看起来有点麻烦,我认为这可以更有效地完成。欢迎任何想法!

我导入的数据是包含欧洲机场数据的tsv文件:

{{1}}

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试将数值数组插入到单元格数组中。您需要转换一个或另一个,以便它们是相同的类型。例如,您可以将数据单元格数组转换为数字数组(如果它是数字数据):

cell2mat(data);
data(1:10,1:10) = A;

或将新数据转换为单元格数组:

data(1:10,1:10) = num2cell(A)