将带有工程符号的数据导入 Matlab
Importing data with engineering notation into Matlab
我有一个 .xls 文件,我想通过 xlsread 函数将它导入到 Matlab 中。我得到带有工程符号的数字的 NaN。就像我得到 15.252 B 或 1.25 M 的 NaN
有什么建议吗?
更新:我可以使用 [num,txt,raw] = xlsread('...')
,原始的正是我想要的,但是我如何用 (*106) 替换 Ms?
编辑:
Matlab does not offer any built-in formatting of strings in engineering format.
来源:http://se.mathworks.com/matlabcentral/answers/892-engineering-notation-printed-into-files
在源代码中,您还可以找到对您有帮助的功能。
首先,您可以使用
从元胞数组中提取 excel 中的所有内容
[~,~,raw] = xlsread('MyExcelFilename.xlsx')
然后您可以编写一个简单的函数,该函数 returns 来自基于 'B'、'M' 等的字符串中的数字。这是这样一个例子:
function mynumber = myfunc( mystring )
% get the numeric part
my_cell = regexp(mystring,'[0-9.]+','match');
mynumber = str2double(my_cell{1});
% get ending characters
my_cell = regexp(mystring,'[A-z]+','match');
mychars = my_cell{1};
% multiply the number based on char
switch mychars
case 'B'
mynumber = mynumber*1e9;
case 'M'
mynumber = mynumber*1e6;
otherwise
end
end
当然还有其他方法可以将数字字符串从其余部分中拆分出来,使用你想要的。有关详细信息,请参阅 regexp
文档。最后使用 cellfun
将元胞数组转换为数值数组:
my_array = cellfun(@myfunc,raw);
我有一个 .xls 文件,我想通过 xlsread 函数将它导入到 Matlab 中。我得到带有工程符号的数字的 NaN。就像我得到 15.252 B 或 1.25 M 的 NaN 有什么建议吗?
更新:我可以使用 [num,txt,raw] = xlsread('...')
,原始的正是我想要的,但是我如何用 (*106) 替换 Ms?
编辑:
Matlab does not offer any built-in formatting of strings in engineering format.
来源:http://se.mathworks.com/matlabcentral/answers/892-engineering-notation-printed-into-files
在源代码中,您还可以找到对您有帮助的功能。
首先,您可以使用
从元胞数组中提取 excel 中的所有内容[~,~,raw] = xlsread('MyExcelFilename.xlsx')
然后您可以编写一个简单的函数,该函数 returns 来自基于 'B'、'M' 等的字符串中的数字。这是这样一个例子:
function mynumber = myfunc( mystring )
% get the numeric part
my_cell = regexp(mystring,'[0-9.]+','match');
mynumber = str2double(my_cell{1});
% get ending characters
my_cell = regexp(mystring,'[A-z]+','match');
mychars = my_cell{1};
% multiply the number based on char
switch mychars
case 'B'
mynumber = mynumber*1e9;
case 'M'
mynumber = mynumber*1e6;
otherwise
end
end
当然还有其他方法可以将数字字符串从其余部分中拆分出来,使用你想要的。有关详细信息,请参阅 regexp
文档。最后使用 cellfun
将元胞数组转换为数值数组:
my_array = cellfun(@myfunc,raw);