首页 > 解决方案 > 如何在 Julia 中将矩阵中的偶数放在单独的向量中?

问题描述

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

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

.

我尝试了下面提到的一些事情:

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

vector=(matrix.%2==0);

我希望输出是可以除以某个数字的数字向量,但在第一种情况下我会得到错误,而在第二种情况下我只会得到“真”或“假”。

这是我的第一篇文章,如果我犯了任何错误或违反任何规则,请见谅。提前致谢!

标签: matrixvectorjulia

解决方案


首先,欢迎来到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

.==请注意按元素应用相等比较的额外点。

更快的版本是使用findall

julia> M[findall(x->x%2==0, M)]
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

最后,也许最典型的选择是使用filter

julia> filter(iseven, M)  
6-element Array{Int64,1}: 
  6                       
  2                       
 10                       
 10                       
  8                       
  6                       

推荐阅读