我有一个矩阵数组,它们都是不同的长度。我想比较矩阵 1 中每个项目与矩阵 2 中项目的距离,依此类推。我在下面写的 for 循环工作得很好,除非它到达长度为 2 的矩阵。循环继续到 xx = 3,然后调用错误("位置 1 中的索引超出数组边界。指数不得超过 2."),因为没有current_mat(3,:).为什么它只对长度为 2 的矩阵执行此操作?我对 matlab 比较陌生,所以如果这是一个简单的问题,请道歉。这里有一些玩具数据,它们给出了我在较大数据集中看到的相同错误。
matrix_1 = ones(16,3)
matrix_2 = ones(14,3)
matrix_3 = ones(2,3)
matrix_4 = ones(10,3)
my_array = {matrix_1; matrix_2; matrix_3; matrix_4}
for ii = 1:length(my_array)-1;
current_mat = my_array{ii};
compare_mat = my_array{ii+1};
for xx = 1:length(current_mat);
xx_info = current_mat(xx,:);
end
end
问题是,当给定矩阵输入时,length
返回矩阵的最长维度,而不是行数。就您的matrix_3
而言,这是 3,尽管您似乎期望 2。因此,xx
从 1 变为 3,在第 11 行中,您尝试访问在xx=3
时不存在的行。最好是显式遍历m
维度。您可以使用返回矩阵中的行数和列数的size
执行此操作:
matrix_1 = ones(16,3)
matrix_2 = ones(14,3)
matrix_3 = ones(2,3)
matrix_4 = ones(10,3)
my_array = {matrix_1; matrix_2; matrix_3; matrix_4}
for ii = 1:length(my_array)-1;
current_mat = my_array{ii};
compare_mat = my_array{ii+1};
[m,n] = size(current_mat); % <-- use size here, not length
for xx = 1:m;
xx_info = current_mat(xx,:);
end
end
或者,如果您想查看列:
matrix_1 = ones(16,3)
matrix_2 = ones(14,3)
matrix_3 = ones(2,3)
matrix_4 = ones(10,3)
my_array = {matrix_1; matrix_2; matrix_3; matrix_4}
for ii = 1:length(my_array)-1;
current_mat = my_array{ii};
compare_mat = my_array{ii+1};
[m,n] = size(current_mat); % <-- use size here, not length
for xx = 1:n;
xx_info = current_mat(:,xx);
end
end
这段代码应该适合你。您没有指定列(或行)的长度作为行列式,
matrix_1 = ones(16,3);
matrix_2 = ones(14,3);
matrix_3 = ones(2,3);
matrix_4 = ones(10,3);
my_array = {matrix_1; matrix_2; matrix_3; matrix_4};
for ii = 1:length(my_array)-1
current_mat = my_array{ii};
compare_mat = my_array{ii+1};
for xx = 1:size(current_mat,2) % length of columns
xx_info = current_mat(:,xx); % Can compare across columns, since no of columns are consistent across multiple matrices
end
end