【发布时间】:2016-05-04 22:54:02
【问题描述】:
我在 Matlab 中有一个数组
A = [1 2 3 4 5 6 7 8 9;
67 67 67 86 86 86 86 67 67]';
A 的第一行中的每个点都对应一个“代码”67 或 86。我正在尝试提取"67s" 和"86s" 的这些块,这样每次块开始时,相应的元素都会被放入名为 X 的不同数组的第三维中,其中 .
所以例如在 A 中,我有 3 个不同的块,所以我想得到一个大小为 1x9x3 的数组 X。例如,第一个 67 块我想要 X
X(1,:,1) = [1 2 3];
我知道我会使用 for 循环“填充”这个向量 X
for i=1:size(A,2)
for j=1:size(A,2) %actually j should be up till the number of blocks present
X(1,i,j) = A(1,i)
end
end
但这当然是不正确或不完整的,因为首先我不确定如何分离“块”以及如何正确“填充”X(1,i,j) 中的 j。其次,我怎样才能让代码识别有多少块?
谁能帮忙?
谢谢
【问题讨论】:
-
您确定您的示例数据正确吗?正如您所拥有的那样,您有 4 个
86条目。 -
@Suever 是的,块大小不一样!
-
在你的例子中,如果
X是1x9x3,那么X(1,:,1)应该是一个有9个元素的数组,因此它不能包含[1 2 3]。我建议您查看您的示例。 -
@RafaelMonteiro 我想我无法清楚地解释我的意思。由于我是按块分隔的,因此在 X(:,:,1) 内我只想要第一个块的元素......它们是 1 2 3。
-
但如果
X是一个 3 维矩阵,X(:,:,n)对于每个n将具有相同数量的元素。也许cell array 更适合您。例如,您可以使用X{1} = [1 2 3]和X{2} = [4 5 6 7]之类的内容。
标签: arrays matlab sorting for-loop vector