某些条件为真的数组行号,单位为Julia

某些条件为真的数组行号,单位为Julia,julia,Julia,如果我有 julia> a = [1 0; 2 1; 3 1; 7 0; 5 1; 4 0;] 6×2 Array{Int64,2}: 1 0 2 1 3 1 7 0 5 1 4 0 获取第二列等于1的行数的最快方法是什么?或者,当第二列为1时为真,否则为假的掩码。谢谢 我认为自然的方法是查找(a[:,2]。==1)。 虽然速度可能取决于a的大小,但也应该很快 在撰写本文时进行编辑(2021年2月,Julia 1.5.3,尽管我不知道何时发生更改),没有find

如果我有

julia> a  = [1 0; 2 1; 3 1; 7 0; 5 1; 4 0;]
6×2 Array{Int64,2}:
 1  0
 2  1
 3  1
 7  0
 5  1
 4  0

获取第二列等于1的行数的最快方法是什么?或者,当第二列为1时为真,否则为假的掩码。谢谢

我认为自然的方法是
查找(a[:,2]。==1)
。 虽然速度可能取决于
a
的大小,但也应该很快


在撰写本文时进行编辑(2021年2月,Julia 1.5.3,尽管我不知道何时发生更改),没有
find
。这是有效的:
findall(a[:,2]。==1)
我认为自然的方法是
find(a[:,2]。==1)
。 虽然速度可能取决于
a
的大小,但也应该很快


在撰写本文时进行编辑(2021年2月,Julia 1.5.3,尽管我不知道何时发生更改),没有
find
。这是有效的:
findall(a[:,2]。==1)

另一种方法是使用理解,但速度较慢

julia> pos = [i for i in 1:size(a,1) if a[i,2] == 1]
3-element Array{Int64,1}:
2
3
5

另一种方法是使用理解,但速度较慢

julia> pos = [i for i in 1:size(a,1) if a[i,2] == 1]
3-element Array{Int64,1}:
2
3
5

谢谢这是什么意思。这是一个基本的比较。如果
a
是数组,
a==1
将始终返回
false
,因为1不是数组;但是
a.==1
将返回一个与
a
大小相同的数组,其中
true
位于
a
的位置,其中有一个1.0。这是什么意思。这是一个基本的比较。如果
a
是数组,
a==1
将始终返回
false
,因为1不是数组;但是
a.==1
将返回一个与
a
大小相同的数组,其中
true
位于
a
的位置,其中有一个1。另外
find(view(a,:,2))
工作(在我的机器上再快10倍)也
find(view(a,:,2))
工作(在我的机器上再快10倍)实际上,对于小矩阵,我发现理解要快得多。但对于大型矩阵,情况并非如此。事实上,对于小型矩阵,我发现理解速度要快得多。不过,对于大型矩阵,情况并非如此。