matlab!怎么根据条件直接修改元胞数组中的矩阵 matlab 怎么把元胞数组取出来的内容放到一个新的矩阵

作者&投稿:郗具 (若有异议请与网页底部的电邮联系)
你直接用一个cel{i,j}(15,:)=[a(i,j),b(i,j),c(i,j),d(i,j)]不就行了

MATLAB中如何实现用循环对元胞数组进行赋值?~

元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的 常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫做元胞(cell)。和一般的数值 矩阵一样,元胞数组的内存空间也是动态分配的。
(1)元胞数组的创建

>> a={'matlab',20;ones(2,3),1:10}
a =
'matlab' [ 20]
[2x3 double] [1x10 double]
>> b=[{'matlab'},{20};{ones(2,3)},{1:10}]
b =
'matlab' [ 20]
[2x3 double] [1x10 double]
>> c={10}
c =
[10]
>> c(1,2)={2}
c =
[10] [2]
>> c(2,2)={5}
c =
[10] [2]
[] [5]
>> isequal(a,b)
ans =
1
>> whos
Name Size Bytes Class Attributes
a 2x2 388 cell
ans 1x1 1 logical
b 2x2 388 cell
c 2x2 208 cell
用cell函数创建元胞数组,创建的数组为空元胞。cell函数创建空元胞数组的主要目的是为数组预先分配连续的存储空间,节约内存占用,提高执行效率。
>> a=cell(1)
a =
{[]}
>> b=cell(1,2)
b =
[] []
>> c=cell(3,3)
c =
[] [] []
[] [] []
[] [] []
>> d=cell(2,2,2)
d(:,:,1) =
[] []
[] []

d(:,:,2) =
[] []
[] []
>> whos
Name Size Bytes Class Attributes
a 1x1 4 cell
ans 1x1 1 logical
b 1x2 8 cell
c 3x3 36 cell
d 2x2x2 32 cell
(2)元胞数组的数据获得
从元胞数组中读取数据,可保存为一个标准的数组或一个新的单元数组,或取出数组进行计算。元胞数组中数据的访问,可通过元胞内容的下标进行,用元胞数组名加大括号{}。大括号中数值表示元胞的下标。如a{1,2}表示元胞数组中第一行第二列的元胞。

>> a={20,'matlab';ones(2,3),1:3}
a =
[ 20] 'matlab'
[2x3 double] [1x3 double]
>> str=a(1,2)
str =
'matlab'
>> class(str)
ans =
cell
>> str=a{1,2}
str =
matlab
>> class(str)
ans =
char
()和{}有着本质的区别,大括号用于表示元胞的内容,小括号表示指定的元胞。

a =
[ 20] 'matlab'
[2x3 double] [1x3 double]
>> a{2,1}(2,2)
ans =
0.9134
>> a{2,1}(2,3)
ans =
0.0975
>> a{1,2}(2)
ans =
a
使用元胞的下标,可将一个元胞数组的子集赋值给另一个变量,创建新的元胞数组。
>> a=[{1},{2},{3};{4},{5},{6};{7},{8},{9}]
a =
[1] [2] [3]
[4] [5] [6]
[7] [8] [9]
>> b=a(2:3,2:3)
b =
[5] [6]
[8] [9]
>> c=a(1:3,2:3)
c =
[2] [3]
[5] [6]
[8] [9]
本例使用元胞下标的方式创建了新的元胞数组b和c,通过结果看出b和c就是元胞数组a的一部分。
(3)元胞数组的删除和重塑
要删除单元数组中的行或列,可以用冒号表示单元数组中的行或列,然后对其赋一个空矩阵即可。

a={20,'matlab';ones(2,3),1:3}
a =
[ 20] 'matlab'
[2x3 double] [1x3 double]
>> a(1,:)=[]
a =
[2x3 double] [1x3 double]
>> a={20,'matlab';ones(2,3),1:3};
>> a{1}=[]
a =
[] 'matlab'
[2x3 double] [1x3 double]
>> a(1)=[]
a =
[2x3 double] 'matlab' [1x3 double]
>> a(2)=[]
a =
[2x3 double] [1x3 double]
>> a(1,2)=[]
??? A null assignment can have only one non-colon index.
>> a(1)=[]
a =
[1x3 double]
元宝数组和其他数组一样,也可以通过reshape函数改变形状,改变后的元胞数组与原元胞数组的元素个数相同,不能通过改变形状来添加或删除元胞数组中的元素。

>> a=cell(4,4)
a =
[] [] [] []
[] [] [] []
[] [] [] []
[] [] [] []
>> size(a)
ans =
4 4
>> b=reshape(a,2,8)
b =
[] [] [] [] [] [] [] []
[] [] [] [] [] [] [] []
>> size(b)
ans =
2 8

(5)元胞数组中的操作函数
cell:创建空的元胞数组
cellfun:为元胞数组的每个元胞执行指定的函数
celldisp:显示所有元胞的内容
cellplot:利用图形方式显示元胞数组
cell2mat:将元胞数组转变成为普通的矩阵
mat2cell:将数值矩阵转变成为元胞数组
num2cell:将数值数组转变成为元胞数组
deal:将输入参数赋值给输出
cell2struct:将元胞数组转变成为结构
struct2cell:将结构转变为元胞数组
iscell:判断输入是否为元胞数组

dp_image{i}, 注意是大括号,表示取 第 i 个 胞数据。
定义一个4维向量,最好 把 20 定义成 最后一维
dp_new = zeros(61,73,61,20); 然后赋值

这种带条件的怎么用matlab实现?
答:其实 Pi 就是归一化的 入i 设: 入1=x 属于(0到1)入2=y 入2=z 则 x=0.1:0.05:0.9 解方程组 y+z=1-x;y*log(2,y)+z*log(2,z)=-h-x*log(2,x)条件1> z>y>x>0 a=y/x b=z/x 代码如下:clear clc h=0.9*log(3); %换底 xyz=zeros(1,3);%[x y z]j=...

matlab共有两个循环,其中一个的次数不定,需要根据条件确定怎么办?
答:while 条件 满足条件所进行的运算;end 例如:1到100求和 sum=0;i=1;while i<=100 sum=sum+i;i=i+1;end

matlab中怎么将 M*N的矩阵的每一行中符合条件的元素放入另一个M*N矩 ...
答:定义两个数组,用循环程序判来自第一个矩阵的每个元素是否符合条件,如果符合,则赋值给另一个数组的对应元素,如果不符,则继续判断下一个

怎样用matlab,以35列为条件删除CATDAL(:,35)=[]的行保存为新的矩阵_百...
答:以下面的a为例,进行说明如下:a={17,24,1,8,15;23,5,7,14,16;4,6,13,20,22;10,12,19,21,3;[],[],25,[],9;}';b=a;n=1;while n<=size(b,1)if isequal(b(n,5),{[]})b(n,:)=[];n=n-1;end n=n+1;end a b 结果为:a = [17] [23] [ 4] ...

matlab中如何把符合条件的数据写进集合
答:k=1;for i=1:length(A);%A为分数集合 if(A(i)>=60&&A(i)<=70)B(k)=A(i);k=k+1;end end;%B即为满足要求的新集合

matlab中如何有条件地跳过下一次循环?
答:for的循环变量值在循环体内的改变不会影响循环变量按部就班地取值的。a=0; flag_skip=1;for i=1:10 if a==5 && flag_skip==1 % 引入变量 flag_skip,以判断当a==5时是否需跳过循环 flag_skip=0; % 只允许跳过1次 continue end a=a+1 flag_skip=1;end 由于只跳过下一个循...

MATLAB里怎么输出满足条件的值
答:将x0设为0 h设为0.2 b设为一个合适的0.2的整数倍,例如10

在matlab源程序中如何直接跳过某些语句执行下面的语句啊?用什么符号...
答:为什么要跳过?一般都是用if进行选择,如果想跳出循环就要用break,跳出每一步循环后面的部分进入下一次循环要用continue。matlab没有goto。即使是C,goto也是不被推荐的。标准的顺序程序结构是完全可以避免goto的。哦,原来是这个意思啊。想跳过的那些行,全部选上,然后按ctrl+r.就全部注释掉了,颜色变...

matlab有没有什么命令可以使得,当条件满足时转到指定一行的?谢谢_百度...
答:在matlab中没有goto语句,不能条件满足时转到指定一行。不过你可以把指定的一行编写成一个m文件,如果满足条件你就可以调用m文件!例如:fun.m if(a==1)fun();else ...望采纳!!!

matlab 中条件语句的问题
答:1、if...end结构 用如下条件语句进行实例 运行上面的句子,此条件语句是判断5是否大于3,如果大于3,就将1赋值给a。2、if...else...end 结构 以如下内容进行判断:运行以上语句,结果如下:a1=1,a2=1,判断a1是否大于a2,显然不大于,然后就执行else语句,给a赋值为2,3、if..elseif...else....