我知道如何在另一个矩阵下添加矩阵。
例如A = [A; B];
我有两个不同维度的矩阵(不同的列数和行数),我需要将它们加在一起。一个矩阵是主矩阵,另一个矩阵正在添加。它们都处于for循环中,因此第一个矩阵的维度不断变化。
e.g for i = 1 :3
AngerHist = [AngerHist;Hist];
end
当我跑步时,它给了我这个错误:
??? Error using ==> vertcat CAT arguments dimensions are not consistent. –
我该怎么做?有什么建议吗?
AngerHist = {}; DisgustHist = {};FearHist = {}; HappyHist = {}; SadHist = {};SurpriseHist = {};
Images = 'C:\Users\HP\Documents\MATLAB\Images';
List = dir(Images);
n= size(List,1);
for i = 3:n
List1 = dir(fullfile(Images,List(i).name));
m= size(List1,1);
BASE_DIR = fullfile(Images,List(i).name);
for j = 3: m
I=List1(j).name;
I1= imread(fullfile(BASE_DIR,I),'jpg');
Name = List(i).name;
switch (Name)
case 'Anger'
Hist = UniformLBP(I1);
AngerHist = {AngerHist;Hist};
break;
case 'Disgust'
Hist = UniformLBP(I1);
DisgustHist = {DisgustHist;Hist};
break;
case 'Fear'
Hist = UniformLBP(I1);
FearHist = {FearHist;Hist};
break;
case 'Happy'
Hist = UniformLBP(I1);
HappyHist = {HappyHist;Hist};
break;
case 'Sad'
Hist = UniformLBP(I1);
SadHist = {SadHist;Hist};
break;
case 'Surprise'
Hist = UniformLBP(I1);
SurpriseHist = {SurpriseHist;Hist};
break;
end
end
end
答案 0 :(得分:2)
要垂直堆叠两个矩阵,它们必须具有相同的列数。例如:
A = rand(3,2);
for ctr = 1:3
B = rand(4,2);
A = [A ; B];
end
最后,A
将为15x2。同样,如果矩阵具有相同的行数,则可以水平堆叠它们。
如果矩阵具有不同的行数和列数,那么使用矩阵表示其集合是没有意义的。您可以考虑将每个矩阵设置为单元格数组中的条目。有关详细信息,请参阅the documentation。
答案 1 :(得分:2)
问题不在于循环内的矩阵大小正在发生变化。这是允许的。问题是,要垂直堆叠两个矩阵,它们每个都需要具有相同数量的列。
想象一下有两个矩阵:
A = [ a b c ;
d e f ;
g h i ]
B = [ q r;
s t ]
并尝试执行:
C = [A;B]
C会有多大的尺寸?这是未定义的。
你可以用一列零(或其他东西)填充B,使其宽度合适,这样C最终看起来像:
| a b c |
| d e f |
| g h i |
| q r 0 |
| s t 0 |
或
| a b c |
| d e f |
| g h i |
| 0 q r |
| 0 s t |
但这只是使矩阵堆叠操作有效的方法。
如果矩阵的宽度总是不同,你应该考虑一下你实际上要用它们做些什么,也许可以考虑将它们存储在一个单元格数组中。
答案 2 :(得分:2)
我认为你需要使用细胞:
A={};
A=[A;rand(2,3)];
A=[A;rand(3,4)];
A=[A;rand(4,5)];
A=[A;rand(6,5)];
结果是:
A =
[2x3 double]
[3x4 double]
[4x5 double]
[6x5 double]