将单元格转换为数组

时间:2015-07-03 14:21:03

标签: arrays matlab

我有一个尺寸为1x16384的单元阵列,由16384个数字组成。 我尝试使用cell2mat(),但我得到一个包含所有这些数字的元素。 如何将其转换为尺寸为1x16384的数组。

  

假设B = cell2mat(A);

看起来像;

Columns 16382 through 16384

    '15.849'    '16.337'    '14.872'

B看起来像;

B =

-8.921-8.433-2.5745.23911.58714.02811.5876.7041.821-1.109-2.085-1.5970.3562.

控制台;     class(A),class(A {1}),size(A),size(A {1})

ans =

cell


ans =

char


ans =

           1       16384


ans =

     1     6

对于mcve, Csv input file

DELIMITER = ' ';
HEADERLINES = 3;

% Import the file
newData1 = importdata('C:\Python34\co2a0000364.csv', DELIMITER, HEADERLINES);

% Create new variables in the base workspace from those fields.
vars = fieldnames(newData1);
for i = 1:length(vars)
    assignin('base', vars{i}, newData1.(vars{i}));
end


new = textdata(6:16452,4);
A = new;

for z = 1:63
    A(i*257)=[];
end

B = A'
A= B;
A= cell2mat(B)
B= A

1 个答案:

答案 0 :(得分:2)

您导入数据的方式非常笨拙。我邀请您阅读textscan函数文档,它可以更灵活地导入混合数据类型(文本和数字数据)。

我建议你使用另一种导入方式,它使用textscan

%% // Import only the 4th column of data
fid = fopen('co2a0000364.csv') ;
M = textscan( fid , '%*s%*s%*s%f' , 'Delimiter',' ' , 'HeaderLines',4) ;
fclose(fid) ;
M = cell2mat(M) ;

%% // reshape to have each channel in its own colum
M = reshape( M , 257 , [] ) ;

%% // Delete the channel number from the data table
M(1,:) = [] ;

这将为您提供一个漂亮的256 * 64矩阵,其中包含一列中64个通道中每个通道的数据。

如果你真的希望它们在一列中按顺序排列,只需添加:

M = M(:) ;

到代码的末尾。

说明注释:我使用的textscan格式说明符:'%*s%*s%*s%f'告诉函数每行读取4个元素:
- 3x字符串:%s
- 1x浮点数:%f

在元素的格式说明符中添加字符*(例如%*s)告诉函数忽略元素,因此它不会将其放入输出