Matrix 在Julia中,如何将矩阵中的偶数放在独立向量中?

Matrix 在Julia中,如何将矩阵中的偶数放在独立向量中?,matrix,vector,julia,Matrix,Vector,Julia,我正在解决Julia中的一些矩阵问题,我需要把可以从矩阵中除以2(或任何其他数字)的数字放在单独的向量中。一般来说,当我需要从矩阵中分离出可以用2、3或4等分的数字时,我不能正确地索引它们。基本上,我需要Julia等效的Matlab命令: vector=matrix(rem(matrix,2)==0) 我尝试了下面提到的几件事: vector=matrix[matrix.%2==0]; vector=(matrix.%2==0); 我希望输出是可以用某个数除的数字向量,但在第一种情况下,

我正在解决Julia中的一些矩阵问题,我需要把可以从矩阵中除以2(或任何其他数字)的数字放在单独的向量中。一般来说,当我需要从矩阵中分离出可以用2、3或4等分的数字时,我不能正确地索引它们。基本上,我需要Julia等效的Matlab命令:

vector=matrix(rem(matrix,2)==0)

我尝试了下面提到的几件事:

vector=matrix[matrix.%2==0];

vector=(matrix.%2==0);
我希望输出是可以用某个数除的数字向量,但在第一种情况下,我得到错误,在第二种情况下,我只得到“真”或“假”

这是我的第一篇帖子,如果我犯了任何错误或违反了任何规则,请原谅。
提前谢谢

首先,欢迎来到stackoverflow

要想得到你想要的,而且你几乎做对了,一个方法是:

julia> M = rand(1:10, 3,3)
3×3 Array{Int64,2}:
 3  10  7
 6   7  8
 2  10  6

julia> v = M[M .% 2 .== 0]
6-element Array{Int64,1}:
  6
  2
 10
 10
  8
  6
请注意
==
中的额外点,它应用了相等比较元素

更快的版本是使用:

这里,
x->x%2==0
是一个匿名函数,表示查找标准。在特殊情况下,
x%2==0
可以简单地用
iseven
替换:

julia> M[findall(iseven, M)]
6-element Array{Int64,1}:
  6
  2
 10
 10
  8
  6
你也可以利用它来获得你想要的东西,这应该更快:

julia> [x for x in M if iseven(x)]
6-element Array{Int64,1}:
  6
  2
 10
 10
  8
  6
最后,可能是最具idomatic的选择,即使用:


非常感谢您的详细回答!这解决了我的问题,我也学到了一些新的东西。。。祝你一切顺利!很高兴我的回答很有帮助!享受朱莉娅的下一步吧!例如,您可以使用
replace!(x->iseven(x)?3:x,M)
。我还想补充一点,如果你有一些MATLAB代码,除了需要添加的额外的
点之外,它几乎可以工作,你可以尝试前面的
@。
宏:在你的情况下,这就可以做
向量=@。矩阵[matrix%2==0]
还有一个过滤器,如
过滤器(iseven,M)
,它至少在我的计算机上更快,而且可能是最优雅的。(事实上——别提了。理解是最快的。)
julia> [x for x in M if iseven(x)]
6-element Array{Int64,1}:
  6
  2
 10
 10
  8
  6
julia> filter(iseven, M)  
6-element Array{Int64,1}: 
  6                       
  2                       
 10                       
 10                       
  8                       
  6