我有一个尺寸为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
答案 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
)告诉函数忽略元素,因此它不会将其放入输出