我在其他代码中看到过这一点,无法理解这意味着什么x=x(: , N)
,其中x是2D阵列,N是1D阵列
以下是的一些例子
test = [1,2;3,4];
ttt = [1,1,1,1 ,2,2,2,2];
test = test(:,ttt);
结果是:
1 1 1 1 2 2 2 2
3 3 3 3 4 4 4 4
和
test = [1,2;3,4];
ttt = [1,1,1,1 ,1,1,1,1];
test = test(:,ttt);
结果是:
1 1 1 1 1 1 1 1
3 3 3 3 3 3 3 3
谢谢!
test(:,ttt)
表示:从矩阵test
取所有行(:
(,列由ttt
表示。
因此,在第一个示例(ttt = [1,1,1,1,2,2,2,2]
(中,您将test
的第一列取四次,然后将第二列取四倍。在第二个示例(ttt = [1,1,1,1,1,1,1,1]
(中,您将test
的第一列取八次。
有关Matlab中索引的更多信息,请参阅此处。
符号x(:, N)
主要用于索引x
中由N
给出的特定列,如中的列
>> x = zeros(3, 3);
>> x(:) = 1:9;
>> N = [1 3];
>> x(:, N)
ans =
1 7
2 8
3 9
这里:
对x
中的所有行进行索引,并且N
用于对x
中的列1
和3
进行索引。你的例子就是这方面的延伸。
因此,在下一个示例中,因为1
发生多次,所以每次发生时都会对x
的该列进行索引(并返回(。因此,为什么我们看到包含1
和3
的第一列4次。
>> x = [1 2; 3 4]
x =
1 2
3 4
>> N = [1 1 1 1];
>> x(:, N)
ans =
1 1 1 1
3 3 3 3
您问题中的最后一个例子是它的另一个扩展,只是这次我们在N
中也有2
,所以我们看到了复制了2
和4
的第二列。
>> x = [1 2; 3 4]
x =
1 2
3 4
>> N = [1 1 1 1 2 2 2 2];
>> x(:, N)
ans =
1 1 1 1 2 2 2 2
3 3 3 3 4 4 4 4
接下来,当我们添加=
时,我们将x(:, N)
的输出分配给x
,覆盖之前在中的内容
>> x = x(:, N)
ans =
1 1 1 1 2 2 2 2
3 3 3 3 4 4 4 4