2015-07-03 141 views
0

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

假设B = cell2mat(A);

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. 

控制台; 类(A),类(A {1}),尺寸(A),大小导入数据的(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 
+3

如果您发布了[mcve](http://stackoverflow.com/help/mcve) – kkuilla

+0

,它会有所帮助请从命令提示符的输出中发布以下信息,假设您的单元格数组名为'A': class(A)'''class(A {1}),'size(A)','size(A {1})'。您的文章缺少**很多信息来诊断您的问题。 – rayryeng

+0

@kkuilla我重新修正了这个问题。我希望这有帮助! –

回答

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
- 1浮点数:%f

添加字符*中的格式说明符(例如%*s)中的一个元素告知函数忽略的元素,所以它不会将其放入输出中。

+0

非常感谢Hoki,这是非常丰富的信息,它肯定会在未来帮助我,再次感谢。 –

相关问题