MATLAB索引后不需要从double到int32的转换



我有这段代码来从文本文件、四列字符串、三列整数和十进制数中加载数据。

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

doubleint数据强制转换连接到int类型。例如:

>> [pi; int16(5)]
ans =
2×1 int16 column vector
3
5

为了避免这种情况,可以在连接之前强制转换为double。因此,在您的情况下,使用以下内容将每个单元格的内容转换为double(感谢@CrisLuengo的更正(:

[ data; cellfun(@double, temp, 'uniformoutput', true) ]

相关内容

  • 没有找到相关文章

最新更新