Matlab/Octave 代码如何从向量创建布尔矩阵?
How does this Matlab/Octave code create a Boolean matrix from a vector?
第一行代码使用 "discrete labels" 创建一些向量,第二行代码创建一个稀疏矩阵,其中 1 位于标签表示的索引处。 "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
Octave 中的符号 eye(10)(a,:)
表示:构建大小为 10
的单位矩阵 (eye(10)
),然后按照 a
(请注意,a
用作第一个索引,对应于行,:
用作第二个索引,这意味着 "take all columns")。因此,例如,结果的第 4
行是单位矩阵的第 7
行,因为 a
的第 4
项包含 7
。
从这个解释可以清楚地看出 a
可以任意长,前提是它的所有值都是 1
...10
范围内的整数(这些是eye(10)
).
中可用的行
请注意,在 Matlab 中,此 "chained" 索引是不允许的。您必须首先将 eye(10)
分配给一个变量,然后索引到该变量:
m = eye(10);
m(a,:)
最后,一个小"technical"注意:得到的矩阵不是logical
类型(Matlab的布尔数据类型),也不是sparse
。相反,它是 double
.
类型的 full
矩阵
第一行代码使用 "discrete labels" 创建一些向量,第二行代码创建一个稀疏矩阵,其中 1 位于标签表示的索引处。 "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
Octave 中的符号 eye(10)(a,:)
表示:构建大小为 10
的单位矩阵 (eye(10)
),然后按照 a
(请注意,a
用作第一个索引,对应于行,:
用作第二个索引,这意味着 "take all columns")。因此,例如,结果的第 4
行是单位矩阵的第 7
行,因为 a
的第 4
项包含 7
。
从这个解释可以清楚地看出 a
可以任意长,前提是它的所有值都是 1
...10
范围内的整数(这些是eye(10)
).
请注意,在 Matlab 中,此 "chained" 索引是不允许的。您必须首先将 eye(10)
分配给一个变量,然后索引到该变量:
m = eye(10);
m(a,:)
最后,一个小"technical"注意:得到的矩阵不是logical
类型(Matlab的布尔数据类型),也不是sparse
。相反,它是 double
.
full
矩阵