如何从MATLAB中的元胞数组中提取数字?
在本文中,我们将讨论在regexp() 、 str2double() 、 cat()和isletter()函数的帮助下从元胞数组中提取数字。
什么是元胞数组?
元胞数组只不过是一种数据类型,具有称为元胞的索引数据容器,其中每个元胞包含任何类型的数据。它主要包含文本列表、文本和数字的组合或不同大小的数字数组。
例子:
Matlab
% MATLAB code for put data in the cell array
A = {2, 4, 'gfg'}
B = {1, 'GFG', {5; 10; 15}}
Matlab
% MATLAB code for regexp with strjoin()
% Initializing a cell array
A = {'gfg'; 'gfg1.23GFG'; '5gfg10'};
b=regexp(A,'\d+(\.)?(\d+)?','match')
out=strjoin([b{:}],'')
Matlab
% MATLAB code for regexp() demonstration
% Initializing a cell array
A = {'gfg'; 'gfg1.23GFG'; '5gfg10'};
% Calling the regexp() function over the
% above cell array to extract number part
B = regexp(A,'\d+(\.)?(\d+)?','match');
% Calling the str2double() function to
% convert the text to double-precision values
out = str2double([B{:}])
Matlab
% MATLAB code for extract numbers from
% cell using regexp with strcat()
% Initializing a cell array
A = {'gfg'; 'gfg1.23GFG'; '5gfg10'};
A1 = regexp(A,'[\d*\.]*\d*','match')
A2 = [A1{:}]
out = str2double(strcat(A2{:}))
Matlab
% MATLAB code for isletter() demonstration
% Initializing a cell array
A = {'gfg'; 'gfg1.23GFG'; '5gfg'};
% Calling the cat() function to
% concatenate the data of the above
% cell array into a single string
% one after another
S = cat(2, A{:});
% Calling the isletter() function
% to filter the numeric value
S(isletter(S)) = []
输出:
使用正则表达式( )
regexp()函数用于匹配正则表达式。它区分大小写。
Syntax:
startIndex = regexp(str, expression)
[startIndex, endIndex] = regexp(str, expression)
out = regexp(str, expression, outkey)
- startIndex = regexp(str, expression)用于返回与正则表达式指定的字符模式匹配的 str 的每个子字符串的起始索引。如果没有匹配项,则 startIndex 是一个空数组。
- [startIndex,endIndex] = regexp(str,expression)用于返回所有匹配项的开始和结束索引。
- regexp(str, expression, outkey)用于返回由 outkey 指定的输出。例如,如果 outkey 是 'match',则此函数返回与表达式匹配的子字符串,而不是它们的起始索引。
例子:
MATLAB
% MATLAB code for regexp with strjoin()
% Initializing a cell array
A = {'gfg'; 'gfg1.23GFG'; '5gfg10'};
b=regexp(A,'\d+(\.)?(\d+)?','match')
out=strjoin([b{:}],'')
输出:
使用 str2double()
str2double()函数用于将字符串转换为双精度值。
Syntax:
str2double(string)
这里, str2double(字符串)用于将指定字符串的文本转换为双精度值。
例子:
MATLAB
% MATLAB code for regexp() demonstration
% Initializing a cell array
A = {'gfg'; 'gfg1.23GFG'; '5gfg10'};
% Calling the regexp() function over the
% above cell array to extract number part
B = regexp(A,'\d+(\.)?(\d+)?','match');
% Calling the str2double() function to
% convert the text to double-precision values
out = str2double([B{:}])
输出:
out =
1.2300 5.0000 10.0000
使用 cat()
cat()函数用于连接指定的数组。
Syntax:
cat(dim, A, B)
cat(dim, A1, A2 ,…, An)
- cat(dim, A, B)用于在 A 和 B 具有兼容大小时将“B”与维度“dim”一起连接到“A”的末尾,即维度的长度匹配,除了操作维度 dim .
- cat(dim, A1, A2, ..., An)用于将“A1, A2, ..., An”与维度 dim 连接起来。
MATLAB
% MATLAB code for extract numbers from
% cell using regexp with strcat()
% Initializing a cell array
A = {'gfg'; 'gfg1.23GFG'; '5gfg10'};
A1 = regexp(A,'[\d*\.]*\d*','match')
A2 = [A1{:}]
out = str2double(strcat(A2{:}))
输出:
使用 isletter()
isletter()函数用于查找作为字母表字母的元素数组。
Syntax:
isletter(‘string’)
在这里, isletter(' 字符串')用于 返回一个与指定的“字符串”大小相同的数组,其中包含逻辑真,即当“字符串”的元素是字母表中的字母时为 1,当“字符串”的元素不是字母时为逻辑假,即 0。
例子
MATLAB
% MATLAB code for isletter() demonstration
% Initializing a cell array
A = {'gfg'; 'gfg1.23GFG'; '5gfg'};
% Calling the cat() function to
% concatenate the data of the above
% cell array into a single string
% one after another
S = cat(2, A{:});
% Calling the isletter() function
% to filter the numeric value
S(isletter(S)) = []
输出:
S = 1.235