📜  如何从MATLAB中的元胞数组中提取数字?

📅  最后修改于: 2022-05-13 01:55:25.744000             🧑  作者: Mango

如何从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()函数用于匹配正则表达式。它区分大小写。

  • 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()函数用于将字符串转换为双精度值。

这里, 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()函数用于连接指定的数组。



  • 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()函数用于查找作为字母表字母的元素数组。

在这里, 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