第一行代码使用“离散标签”创建一些向量,第二行代码创建一个稀疏矩阵,其中包含标签所代表的索引处的一个。 “eye”会创建一个单位矩阵,但即使向量“a”更长,创建稀疏矩阵的效果仍然有效!?
你能帮我理解发生了什么吗?
octave:4> a = [1 3 5 7 9 2 4 6 8 10]
a =
1 3 5 7 9 2 4 6 8 10
octave:5> eye(10)(a,:)
ans =
Permutation Matrix
1 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 1
答案 0 :(得分:6)
Octave中的符号eye(10)(a,:)
表示:构建大小 - 10
单位矩阵(eye(10)
),然后按a
给出的顺序选择其行(请注意a
用作第一个索引,对应于行,:
用作第二个索引,这意味着“占用所有列”。因此,例如,结果的4
行是单位矩阵的行7
,因为4
的{{1}}条目包含a
。
从这个解释中可以明确7
只要你愿意,只要它的所有值都是a
... 1
范围内的整数(这些是行)可在10
)中找到。
请注意,在Matlab中,不允许使用“链式”索引。您必须首先将eye(10)
分配给变量,然后索引到该变量:
eye(10)
最后,一个次要的“技术”注释:获得的矩阵不是m = eye(10);
m(a,:)
类型(Matlab的布尔数据类型),也不是logical
。相反,它是sparse
类型的full
矩阵。