cell(3,4) % cell的3行4列矩阵
cell1 = {23,'123','hello'} % {[23]} {['123']} {['hello']} 这就是cell的array
cellmat = {2,'a';3,'b'}; % cell矩阵
cell1(1) % {23}
cell1{1} % 23
cellmat{3}(1) % 'h'
cellmat{2,2} % 'b'
cell1 = {23,'123','hello'}
cell1(2) = []; % 把第二个格子删除了
cell1(2) = {'12'}; % {23,'12','hello'}把第二个柜子换了
cell1 = {'A','BB','CCC'};
length(cell1); % 3
strlength(cell1); % 1 2 3
name = {'123','456','789'};
name1 = strjoin(name,'-'); % 123-456-789
strsplit(name1,'-'); % 123 456 789
iscellstr(name); % 1
namechange = [name 123] % {'123'} {'456'} {'789'} {[123]}
function Practice_8dot1(inputCell)
TotalNumOfElement = numel(inputCell); % cell的总数
randIndex = randi(TotalNumOfElement); % 随机cell的总数中的一个元素
disp(inputCell{randIndex}); % 随机选取一个cell中的柜子
end
package = struct('item_no',123,'cost',19.99,'price',39.95,'code','g'); % field:字段 value:值
class(package) % 'struct'
package.item_no % 123 字典的访问
package.('item_no') % 123 字典的访问
package.item = 123; % item:123
package.no = 5; % item:123 no:5
package.o = 'g'; % item:123 no:5 o:'g'
% 字典的修改
package.o = 'a'; % item:123 no:5 o:'a'
% 字典的删除
rmfield(package,'item'); % no:5 o:'a'
% 是否是字典
isstruct(package) % 1 是字典
isstruct({1 2 3}) % 0 不是字典
% 是否是字典的字段
isfield(package,'no') % 1 有存在字段为5
% 字典的所有字段
fieldnames(package) % {no} {o}
%% addressStruct(newstruct,'ab')
function addressStruct(struct,field)
if isfield(struct,field)
fprintf('is ''%s''',field);
disp(struct.(field));
else
fprintf('erro');
end
end
packs(1) = struct('item',123,'cost',19.99,'price',39.99,'code','a');
packs(2) = struct('item',456,'cost',19.99,'price',39.99,'code','b');
packs(3) = struct('item',789,'cost',19.99,'price',39.99,'code','c');
%{
item
cost
price
code
}%
packs
%{
item: 123
cost: 19.9900
price: 39.9900
code: 'a'
}%
packs(1);
packs(1).name = struct1; % 给第一个字段新增一个struct1
%{
item: 123
cost: 19.9900
price: 39.9900
code: 'a'
name: struct1
}%
packs(1);
%{
item: 456
cost: 19.9900
price: 39.9900
code: 'b'
name: []
}%
packs(2); % 给第一个字段新增一个struct1;第二个也会出现一个新字段
%{
item: 456
cost: 19.9900
price: 39.9900
name: []
}%
refield(packs(1),'code'); % 就会删除 packs(1) packs(2) packs(3)的字段
packs.code; % 'a' 'b' 'c' % 逗号分隔符 写法等价packs(1).code,packs(2).code,packs(3).code
[1,2,3,4] % 1 2 3 4
1,2,3,4 % 1 2 3 4
% cell
cell = {12,'123','hello'};
cell{1:3}; % 12 '123' 'hello' 这就是逗号分隔符
cell{1},cell{2},cell{3}; % 12 '123' 'hello' 这就是逗号分隔符
[a,b,c] = cell{:}; % a=12 b='123' c='hello' 赋值[***] = ***的意思
% 所以上面👆的
packs.code; % 'a' 'b' 'c' % 逗号分隔符 写法等价packs(1).code,packs(2).code,packs(3).code
[packs.code]; % ['a' 'b' 'c'] 这是数组
a1 = 123;
a2 = '123';
a3 = 'hello';
% 用两步才可以构成Comma separated list
c = {a1,a2,a1}
[b1,b2,b3] = c{:};
% 用一步构成Comma separated list
[b1,b2,b3] = deal(a1,a2,a3); % deal就是处理变成Comma separated list的;deal就是分割的意思
cell2mat({1,2,3}) % 1 2 3;cell变成矩阵;变成1行3列的矩阵
X =-pi:pi/10:pi;
Y1 = sin(X);
Y2 = cos(X);
Y3 = sinh(X);
%{
LineWidth 线宽
MarkerEdgeColor 点的颜色
MarkerFaceColor 点中间的颜色
MarkerSize 点的大小
%}
Dec = {'o-','LineWidth',3,'MarkerEdgeColor','k','MarkerFaceColor','y','MarkerSize',10};
figure(1);clf;hold on;
plot(X,Y1,Dec{:});
plot(X,Y2,Dec{:});
plot(X,Y3,Dec{:});
[65,'1']; % 'A1'
[65,"1"]; % "65","1"
c = cell(1,2); % 新建一个1行2列的空cell
[c{:}] = size(rand(1,4)); % {[1]} {[4]}
[c{:}]; % 数组
c{:}; % 逗号分割
b = cell(1,4);
packs(1) = struct('item',123,'cost',19.99,'price',39.99,'code','a');
packs(2) = struct('item',456,'cost',19.99,'price',39.99,'code','b');
packs(3) = struct('item',789,'cost',19.99,'price',39.99,'code','c');
save(packs_saved,packs) % 保存成packs_saved.mat的文件
load('packs_saved.mat') % 加载
function printpackages(packstruct)
fprintf('\nItem # Cost Price Code \n\n');
for i = 1:numel(packstruct)
fprintf('6d %6.2f %7.2f %5c\n',...
packstruct(i).item,...
packstruct(i).cost,...
packstruct(i).price,...
packstruct(i).code);
end
end
最后的得到的
student(1) = struct('name','C,Joe','id_no',999,'quiz',[10.0,9.5,0.0,10.0]);
student(2) = struct('name','Hernandez,Pete','id_no',784,'quiz',[10.0,10.0,9.0,10.0]);
student(3) = struct('name','Brownnose,Violet','id_no',332,'quiz',[7.5,6.0,8.5,7.5]);
threeNote1(student);
function threeNote1(student)
fprintf('Name Average\n');
for i = 1:numel(student)
fprintf('%-20s %.1f\n',student(i).name,mean(student(i).quiz));
end
end
lineseg = struct('endpoint1',struct('x',2,'y',4),'endpoint2',struct('x',1,'y',6));
cyls(3)=struct('code','c','dimensions',struct('rad',3,'height',6),'weight',9)
cyls(2)=struct('code','b','dimensions',struct('rad',4,'height',2),'weight',5)
cyls(1)=struct('code','a','dimensions',struct('rad',3,'height',6),'weight',7)
cyls(1).dimensions.rad; % 3
cell = {'ab','abc','abcde'};
mat = categorical(cell); % ab abc abcde将cell转化为categorical类型
A =[ ...
3,2;...
3,3;...
3,2;...
2,1;...
3,2 ...
];
valueset = [1:3]; % 对应cell的index
catnames = {'child','adult','senior'}; % cell
% 'Ordinal',true开启排序 如可以使用 B(4,2) < B(1,1) 为 1;就是child < senior
B = categorical(A,valueset,catnames,'Ordinal',true);
names = {'Harry','Sally','Jose'}; % 一般插入都用cell
weights = [185;133;210];
heights = [74;65.4;72.2];
patients = table(weights,heights,'RowNames',names); % 3行2列的table
% 其实还是对应 左行右列的原则
patients(1:2,1); % 1到2行,第1列的更小的table
patients('Harry',:); % Harry的这一行的所有信息
patients(:,'heights'); % 所有人的heights的信息
patients({'Harry','Sally'},:); % Harry和Sally的这一行的所有信息
summary(patients); % 查看一些信息
vec = [8 9 7 5 4 2];
sort(vec); % 也可以
sort(vec,'descend'); % 降序排序
sort(vec,'ascend'); % 升序排序
%% i_sorted返回排序前的index
vec1 = [7 5 9];
[w_sorted,i_sorted] = sort(vec1); % w_sorted 5 7 9;i_sorted 2 1 3
cyls(3)=struct('code','c','dimensions',struct('rad',3,'height',6),'weight',9)
cyls(2)=struct('code','b','dimensions',struct('rad',4,'height',2),'weight',5)
cyls(1)=struct('code','a','dimensions',struct('rad',3,'height',6),'weight',7)
volume1 = [7 9 5];
for i = 1:numel(cyls)
vol = volume1(i); % computeCylVol就是计算体积的自己写的
cyls(i).volume = vol;
end
% ~忽略前值,取到升序排序后的值
[~ ,i_order] = sort([cyls.volume],'ascend');
% 赋值成升序排序后的值
cyls = cyls(i_order);
names = {'Harry','Sally','Jose'}; % 一般插入都用cell
weights = [185;133;210];
heights = [74;65.4;72.2];
patients = table(weights,heights,'RowNames',names); % 3行2列的table
[~ ,i_order] = sort(patients{:,'weights'}); % 将weights排序
patients(i_order,:); % 用i_order进行排序
%% 用行进行排序
sortrows(patients,'heights'); % 通过heights进行排序
issortedrows(patients,'heights'); % 判断是否已经排序