在 Julia 中使用布尔值解析矩阵

Álv*_*gas 5 boolean vector matrix julia

因此,我尝试使用布尔值从矩阵中选择元素,但我偶然发现了我无法理解的这种行为。\n考虑以下矩阵。

\n
id = [1 1 2 2]\nx1 = [1 2 3 4 ]\nx2 = [5 6 7 8 ]\nX = transpose([x1 ; x2 ])\n
Run Code Online (Sandbox Code Playgroud)\n

X现在我想选择对应于 的所有元素id==1。这是一种方法。

\n
X[ [true ,true, false ,false ] , : ]\n# 2\xc3\x972 Matrix{Int64}:\n# 1  5\n# 2  6\n\n
Run Code Online (Sandbox Code Playgroud)\n

但是,当我使用逻辑条件创建布尔值时,它无法产生所需的结果。

\n
select_row = isone.(transpose(id).==1) \nX[ select_row , : ]\n# 2\xc3\x971 Matrix{Int64}:\n# 1\n# 2\n
Run Code Online (Sandbox Code Playgroud)\n

知道发生了什么吗?先感谢您。

\n

Bog*_*ski 5

首先让我评论一下如何解决您的问题。您的select_row选择器必须是向量,因此以下内容将起作用:

\n
julia> select_row = vec(transpose(id).==1)\n4-element BitVector:\n 1\n 1\n 0\n 0\n\njulia> X[select_row, :]\n2\xc3\x972 Matrix{Int64}:\n 1  5\n 2  6\n
Run Code Online (Sandbox Code Playgroud)\n

在你的例子中select_row是一个 4x1 矩阵:

\n
julia> select_row = isone.(transpose(id).==1)\n4\xc3\x971 BitMatrix:\n 1\n 1\n 0\n 0\n
Run Code Online (Sandbox Code Playgroud)\n

在这种情况下,我们遇到了 Julia 手册中没有详细记录的情况,应该如何处理(我将与核心团队讨论此情况,并在此评论是否有官方解释)。

\n