我有这段代码来从文本文件、四列字符串、三列整数和十进制数中加载数据。
fileID = fopen(Files(j,1).name);
formatSpec = '%*s %d %d %d %f';
data = zeros(0, 4, 'double');
k = 0;
while ~feof(fileID)
k = k+1;
temp = textscan(fileID,formatSpec,10,'HeaderLines',1);
data = [data; [ temp{:} ] ] ;
end
fclose(fileID);
在临时变量中,最后一列保存为十进制数,但命令data=[data;[temp{:}]]
因此它是四舍五入的,我在最后一列得到0或1。
我在问为什么
温度看起来像(1x4细胞(:
[5248000;5248100;....] [5248100;5248200;....]
[111;95;....] [0,600000000000000;0,570000000000000;....]
数据看起来像(1x4矩阵(:
5248000 5248100 111 1
5248100 5248200 95 1
编辑:重新测试(重新创建同一变量,只是从变量编辑器中复制数字(
temp=cell(1,4);
temp{1}=[0;100;200;300;400;500;600;700;800;900];
temp{2}=[100;200;300;400;500;600;700;800;900;1000];
temp{3}=[143;155;150;128;121;122;137;145;145;126];
temp{4}=[0.340000000000000;0.450000000000000;0.370000000000000;...
0.570000000000000;0.570000000000000;0.580000000000000;...
0.590000000000000;0.500000000000000;0.460000000000000;0.480000000000000];
tempx=[temp{:}]
这是正确的!最后一列d为十进制。
但为什么它不能对来自文本扫描功能的"真实"数据起作用呢?
考虑将所有内容读取为浮点值:
更改
formatSpec = '%*s %d %d %d %f';
至
formatSpec = '%*s %f %f %f %f';
如果在EDIT中有效,因为变量的类型已经是double
。
将double
和int
数据强制转换连接到int
类型。例如:
>> [pi; int16(5)]
ans =
2×1 int16 column vector
3
5
为了避免这种情况,可以在连接之前强制转换为double
。因此,在您的情况下,使用以下内容将每个单元格的内容转换为double
(感谢@CrisLuengo的更正(:
[ data; cellfun(@double, temp, 'uniformoutput', true) ]