在 Julia 中使用布尔值解析矩阵
Parsing matrix using Booleans in Julia
所以我试图 select 使用布尔值从矩阵中获取元素,但我偶然发现了这种我无法理解的行为。
考虑以下矩阵。
id = [1 1 2 2]
x1 = [1 2 3 4 ]
x2 = [5 6 7 8 ]
X = transpose([x1 ; x2 ])
现在我想要 select X
中对应于 id==1
的所有元素。这是一种方法。
X[ [true ,true, false ,false ] , : ]
# 2×2 Matrix{Int64}:
# 1 5
# 2 6
但是,当我使用逻辑条件创建布尔值时,它无法产生所需的结果。
select_row = isone.(transpose(id).==1)
X[ select_row , : ]
# 2×1 Matrix{Int64}:
# 1
# 2
知道发生了什么事吗?提前谢谢你。
首先让我评论一下如何解决您的问题。您的 select_row
选择器必须是向量,因此以下内容将起作用:
julia> select_row = vec(transpose(id).==1)
4-element BitVector:
1
1
0
0
julia> X[select_row, :]
2×2 Matrix{Int64}:
1 5
2 6
在你的例子中 select_row
是一个 4x1 矩阵:
julia> select_row = isone.(transpose(id).==1)
4×1 BitMatrix:
1
1
0
0
在这种情况下,我们遇到了 Julia 手册中没有详细记录的情况,应该如何处理(我将与核心团队讨论这种情况,并在此处评论是否有官方解释)。
所以我试图 select 使用布尔值从矩阵中获取元素,但我偶然发现了这种我无法理解的行为。 考虑以下矩阵。
id = [1 1 2 2]
x1 = [1 2 3 4 ]
x2 = [5 6 7 8 ]
X = transpose([x1 ; x2 ])
现在我想要 select X
中对应于 id==1
的所有元素。这是一种方法。
X[ [true ,true, false ,false ] , : ]
# 2×2 Matrix{Int64}:
# 1 5
# 2 6
但是,当我使用逻辑条件创建布尔值时,它无法产生所需的结果。
select_row = isone.(transpose(id).==1)
X[ select_row , : ]
# 2×1 Matrix{Int64}:
# 1
# 2
知道发生了什么事吗?提前谢谢你。
首先让我评论一下如何解决您的问题。您的 select_row
选择器必须是向量,因此以下内容将起作用:
julia> select_row = vec(transpose(id).==1)
4-element BitVector:
1
1
0
0
julia> X[select_row, :]
2×2 Matrix{Int64}:
1 5
2 6
在你的例子中 select_row
是一个 4x1 矩阵:
julia> select_row = isone.(transpose(id).==1)
4×1 BitMatrix:
1
1
0
0
在这种情况下,我们遇到了 Julia 手册中没有详细记录的情况,应该如何处理(我将与核心团队讨论这种情况,并在此处评论是否有官方解释)。