请问如何批量获取matlab元胞数组非空元素中符合条件的内容?

供稿:hz-xin.com     日期:2025-01-14
请问如何批量获取matlab元胞数组非空元素中符合条件的内容?

参考代码
>>
c={zeros(2,3)
[]
magic(3);
[]
ones(4,3)
pascal(3)}
c
=
[2x3
double]
[]
[3x3
double]
[]
[4x3
double]
[3x3
double]
>>
idx=cellfun(@(x)~isempty(x),c,'UniformOutput',true);
>>
c1=cellfun(@(x)x(:,3),c(idx),'UniformOutput',false)
c1
=
[2x1
double]
[4x1
double]
[3x1
double]
[3x1
double]
>>
cat(1,c1{:})
ans
=
0
0
1
1
1
1
6
7
2
1
3
6
说明
一共4条语句:
第1句构造一个简单的测试用例;
第2句筛选非空单元;
第3句提取非空单元的第三列;
第4句将提取的内容拼接为一个列向量。
主要用到了cellfun和cat两个函数以及匿名函数,请自行查阅文档好好体会一下,有困难再追问。
顺便提醒楼上一下,元胞数组是MATLAB中很有特色、实用价值很大的一种数据类型,你用MATLAB很多年都没用过,我只能说为你感到惋惜。这种数据类型从十几年前5.0版刚出来我就觉得非常有用,这么多年来用了很多,尤其是是7.x版引入了cellfun函数以及匿名函数之后,用起来就更加方便了。

假设A是209个元素的元胞数组,并且每个元素矩阵的行数相同。 B=[];for n=1:length(A) B=[B,A{n}(:,[1 end])];%我不知道你想怎么合并,我就按A{1}两列A{2}两列A{n}两列这样的顺序合了,不是的话你自己改end。
去除元素:
cella = {[1 2 3],[2 3 4]}
arra = cella{1}
直接取第一个元素
补充:
里面两个数组又用一个[]括起来了?那就变成一个数组了如果B也是1192062*?的话就没问题。
c = x{1}(:,1); %后面加个分号防止你数据太多自动显示出错导致崩溃然后可以用size(c)看看得到的结果长度对不对。

参考代码

>> c={zeros(2,3) [] magic(3); [] ones(4,3) pascal(3)}
c =
    [2x3 double]              []    [3x3 double]
              []    [4x3 double]    [3x3 double]
>> idx=cellfun(@(x)~isempty(x),c,'UniformOutput',true);
>> c1=cellfun(@(x)x(:,3),c(idx),'UniformOutput',false)
c1 =
    [2x1 double]
    [4x1 double]
    [3x1 double]
    [3x1 double]
>> cat(1,c1{:})
ans =
     0
     0
     1
     1
     1
     1
     6
     7
     2
     1
     3
     6

 

说明

一共4条语句:

主要用到了cellfun和cat两个函数以及匿名函数,请自行查阅文档好好体会一下,有困难再追问。

 

顺便提醒楼上一下,元胞数组是MATLAB中很有特色、实用价值很大的一种数据类型,你用MATLAB很多年都没用过,我只能说为你感到惋惜。这种数据类型从十几年前5.0版刚出来我就觉得非常有用,这么多年来用了很多,尤其是是7.x版引入了cellfun函数以及匿名函数之后,用起来就更加方便了。



要是知道元胞数组哪些是空的话,直接挨着去取就可以;;不知道的话,加一个循环检测一下,然后再提取就可以

如何使用MATLAB进行元胞数组批量提取数据?
假设A是209个元素的元胞数组,并且每个元素矩阵的行数相同。B=[];for n=1:length(A)B=[B,A{n}(:,[1 end])];%我不知道你想怎么合并,我就按A{1}两列A{2}两列...A{n}两列这样的顺序合了,不是的话你自己改 end 如果每个元胞内的矩阵相同,则可如下处理 num=size(yourcell{1},...

请问如何批量获取matlab元胞数组非空元素中符合条件的内容?
第1句构造一个简单的测试用例;第2句筛选非空单元;第3句提取非空单元的第三列;第4句将提取的内容拼接为一个列向量。主要用到了cellfun和cat两个函数以及匿名函数,请自行查阅文档好好体会一下,有困难再追问。顺便提醒楼上一下,元胞数组是MATLAB中很有特色、实用价值很大的一种数据类型,你用MATLA...

请问如何使用MATLAB进行元胞数组批量提取数据。
假设A是209个元素的元胞数组,并且每个元素矩阵的行数相同。B=[];for n=1:length(A) B=[B,A{n}(:,[1 end])];%我不知道你想怎么合并,我就按A{1}两列A{2}两列...A{n}两列这样的顺序合了,不是的话你自己改end

matlab中的元胞数组如何实现批量的赋值呢?
回答:元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的 常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫做元胞(cell)。和一般的数值 矩...

MATLAB元胞数组
查看和获取元胞数组的内容是关键操作。可以通过索引获取元素内容,如x1=A{1,2}获取矩阵元素,或x3=A(1,2)直接获取元胞数组。对于多个元胞元素,可以使用deal函数一次性提取,如deal(A{[2,3,4]})获取指定位置的元胞内容。总结来说,MATLAB元胞数组灵活且实用,能方便地管理不同类型的元素,通过...

matlab中 cell数组怎么求相同元胞的个数
[m,n]=find(cellfun(@(x)x==[111],A))

请教Matlab元胞数组的问题:
元包数组可以批量赋值么?没试过,一般都是用循环来做 你这里a{1,:}=rand(3)%a是100个元包元素,而右边只是一个数,这个数不管它有多少个元素,它都只能对应于元包数组中的一个元素。要给元包数组批量赋值,前提就需要一个元包数组,这样既然已经有了,那还赋值干嘛呢。所以还是用循环做 ...

怎么运用MATLAB中的元胞数组(cell)
具体如下:1. 首先,我们先来简单介绍一下有关元胞数组的概念。a=cell(0):a为空的 0×0 cell 数组;a=cell(1):a为1个元素的数组;a=cell(2):a为2x2个元素的数组;按照这样的规律类推下去即可。2.接下来,我们来对数组赋值:a{1,2}=[1 2 3],在这里的{1,2}指的是给与数组...

关于matlab元胞数组的问题
可这样:subjdata={[5.3;2.2;3.3;4.4;1.1],['a';'b';'a';'a';'b']}

如何读取MATLAB的CELL类型数据中的值?
可以直接用坐标索引读取,即:\\x0d\\x0a例如,A是一个元胞数组\\x0d\\x0a那么A{i,j}(m,n)表示:\\x0d\\x0a元胞第i行j列矩阵的第m行第n列\\x0d\\x0a\\x0d\\x0a调整内容:添加和删除与普通矩阵方法一致\\x0d\\x0a相关函数:celldisp:显示所有的内容\\x0d\\x0acell:创建空的元胞...