MATLAB中,我要把元胞数组中的字符串提取出来,应该用啥函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB中,我要把元胞数组中的字符串提取出来,应该用啥函数?相关的知识,希望对你有一定的参考价值。

我的元胞数组是a='qwrrr','yuiiii','ader',我想把qwrrr赋值给b,我用b=a1提取qwrrr,但系统一直报错,说维度不对,请问怎么回事。

参考技术A 应该用b=a1,1

MATLAB - 删除元胞数组中的 NaN 元素。帮助加速功能

【中文标题】MATLAB - 删除元胞数组中的 NaN 元素。帮助加速功能【英文标题】:MATLAB - Remove NaN elements in cell array. Help to speed up a function 【发布时间】:2016-09-15 02:36:14 【问题描述】:

我需要帮助来加快我创建的用于删除元胞数组中的 NaN 元素的函数。

用一个例子更好地解释我的功能。假设我们有一个元胞数组,我有一个indxii 形式的元胞数组,其中每个ii 是一个大小为1xNii 的数组(这意味着数组具有不同的大小),上面有NaN 元素。

datawithNaN1=[1,4,8,6];
datawithNaN2=[4,6,2];
datawithNaN3=[9,8,NaN];
datawithNaN4=[3,NaN,NaN];
datawithNaN5=[NaN,NaN,NaN,NaN];

我希望函数函数做的是删除元胞数组中的所有 NaN 元素。所以这个例子的答案应该是:

datawithoutNaN1=[1,4,8,6];
datawithoutNaN2=[4,6,2];
datawithoutNaN3=[9,8];
datawithoutNaN4=[3];
datawithoutNaN5=[];

到目前为止,我已经编写了一个函数,它可以给我想要的结果,但是特别是在处理大单元阵列或单元阵列内的大阵列时需要太多时间。 我的功能是:

function result = rmNaN(datawithNaN)

[row_cell, col_cell] = size(datawithNaN);
result = cell(row_cell, col_cell);
for i=1:row_cell
    for j=1:col_cell
        [row,col]=size(datawithNaNi,j);
        if col>row
            datawithNaNi,j=datawithNaNi,j';
            [row,~]=size(datawithNaNi,j);
        end
        for k=1:row
            if ~isnan(datawithNaNi,j(k))
                resulti,j(k) = datawithNaNi,j(k);
            else
                continue
            end
        end
    end
end

【问题讨论】:

【参考方案1】:

您可以使用cellfun 轻松完成此操作。

datawithoutNaN = cellfun(@(x)x(~isnan(x)), datawithNaN, 'uniform', 0);

这会遍历元胞数组的每个元素,使用isnan 来确定数组中的哪些元素是NaN,并生成一个大小与x 相同的逻辑数组true NaNfalse 否则。然后它否定它并将其用作逻辑索引以仅获取非Nan 值并返回它们。 'uniform' 输入确保结果也是一个元胞数组。

【讨论】:

我试过了,效果很好!而且比我写的更简单!谢谢:)。

以上是关于MATLAB中,我要把元胞数组中的字符串提取出来,应该用啥函数?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab怎么把元胞数组转化成矩阵

matlab 怎么把元胞数组取出来的内容放到一个新的矩阵

请问如何使用MATLAB进行元胞数组批量提取数据。

MATLAB将元胞数组中特定行列转换为矩阵

如何使用MATLAB进行元胞数组批量提取数据?

matlab中的元胞数组中的数字是字符型保存,存在nodata。。如何转换成数值型矩阵????