Matrix julia使用(行,列)代替索引在矩阵中查找

Matrix julia使用(行,列)代替索引在矩阵中查找,matrix,find,julia,Matrix,Find,Julia,在Julia中,您可以通过以下方式找到矩阵中元素的坐标: julia> find( x -> x == 2, [ 1 2 3; 2 3 4; 1 0 2] ) 3-element Array{Int64,1}: 2 4 9 这些值是正确的,但我更希望得到(row,col)元组 (1,2) (2,1) (3,3) 在朱莉娅身上实现这一点最简单的方法是什么 我不相信有一种内在的方法可以做到这一点,但这里有一个函数可以做到这一点 function findmat(f, A::A

在Julia中,您可以通过以下方式找到矩阵中元素的坐标:

julia> find( x -> x == 2, [ 1 2 3; 2 3 4; 1 0 2] )
3-element Array{Int64,1}:
 2
 4
 9
这些值是正确的,但我更希望得到(row,col)元组

(1,2)
(2,1)
(3,3) 

在朱莉娅身上实现这一点最简单的方法是什么

我不相信有一种内在的方法可以做到这一点,但这里有一个函数可以做到这一点

function findmat(f, A::AbstractMatrix)
  m,n = size(A)
  out = (Int,Int)[]
  for i in 1:m, j in 1:n
    f(A[i,j]) && push!(out,(i,j))
  end
  out
end
e、 g


如果大量项目满足条件,则分两次完成可能更有效,但我对此表示怀疑。

如果您希望避免定义“新”函数,可能:

collect(zip(ind2sub((3,3),find( x -> x == 2, [ 1 2 3; 2 3 4; 1 0 2] ))...))

这就是你要找的。(3,3)隐含在矩阵的大小中。如果矩阵是由一个变量给出的,那么使用
大小(M)

我在Julia标准库中能找到的最接近的东西是
findn

julia> A = [1 2 3; 2 3 4; 1 0 2]
3x3 Array{Int64,2}:
 1  2  3
 2  3  4
 1  0  2

julia> findn(A .== 2)
([2,1,3],[1,2,3])
不过,这给出了向量的元组,而不是元组的向量


另一件需要注意的事情是
(2,1)
处的匹配报告在
(1,2)
处的匹配报告之前。这是因为Julia中的数组是按列主顺序存储的,因此按存储顺序扫描数组
A
将查看
(2,1)
之前的位置
(1,2)

,如果其他人发现此位置,您现在可以使用:

ind2sub(a, index)

它将一个下标元组返回到数组
a
中,该数组对应于线性索引
index

findn([22;22]。==2)!=[(1,1),(1,2),(2,1),(2,2)]
这不是OP所要搜索的,他们想按值搜索这个ind2sub函数在哪里?
ind2sub(a, index)