我有一个单元格向量(例如,大小为50x1
,称为tokens
),每个单元格都是一个具有属性x
,的结构f1
,f2
这些属性是表示数字的字符串。例如,tokens{15}
给出:
x: "-1.4343429"
f1: "15.7947111"
f2: "-5.8196158"
我试图将这些数字放入 3 个向量中(每个向量也是50x1
),其类型为float
. 所以我创建了 3 个向量:
x = zeros(50,1,'single');
f1 = zeros(50,1,'single');
f2 = zeros(50,1,'single');
这工作正常(为什么不呢?)。但是当我尝试填充这些向量时:(L
是一个for
循环索引)
x(L)=tokens{L}.x;
.. also for the other 2
我得到:
从字符串转换为单个时发生以下错误:无法从字符串转换为单个。
我能理解的;隐式转换不适用于single
. 如果和属于 类型x
,它确实有效。f1
f2
50x1 double
我用浮点数做这件事的原因是因为我得到的数据来自一个 C 程序,该程序将一些浮点数写入到一个文件中,由 matlab 读取。如果我尝试在 C 程序中将值转换为双精度值,则会出现舍入错误...
所以,(在我希望是一个好问题之后)我怎样才能以正确的精度获得这些字符串中的数字?(所有字符串的小数位数相同:7)。
MCVE:
filedata = fopen('fname1.txt','rt');
%fname1.txt is created by a C program. I am quite sure that the problem isn't there.
scanned = textscan(filedata,'%s','Delimiter','\n');
raw = scanned{1};
stringValues = strings(50,1);
for K=1:length(raw)
stringValues(K)=raw{K};
end
clear K %purely for convenience
regex = 'x=(?<x>[\-\.0-9]*),f1=(?<f1>[\-\.0-9]*),f2=(?<f2>[\-\.0-9]*)';
tokens = regexp(stringValues,regex,'names');
x = zeros(50,1,'single');
f1 = zeros(50,1,'single');
f2 = zeros(50,1,'single');
for L=1:length(tokens)
x(L)=tokens{L}.x;
f1(L)=tokens{L}.f1;
f2(L)=tokens{L}.f2;
end
str2double
在分配到您的数组之前使用函数(如果需要,然后将其转换为单个)。字符串(字符数组)在用作数字之前必须显式转换为数字。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句