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

Vas*_*sac 4 vector matrix julia

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

vector=matrix(rem(matrix,2)==0)
Run Code Online (Sandbox Code Playgroud)

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

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

vector=(matrix.%2==0);
Run Code Online (Sandbox Code Playgroud)

我希望输出是可以除以一定数字的数字向量,但在第一种情况下,我会出错,在第二种情况下,我只会得到“ true”或“ false”。

这是我的第一篇文章,对于我犯任何错误或违反任何规则,我们深表歉意。提前致谢!

crs*_*nbr 6

首先,欢迎来到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
Run Code Online (Sandbox Code Playgroud)

请注意,.==其中的额外点在元素上应用相等比较。

更快的版本是使用findall

julia> M[findall(x->x%2==0, M)]
6-element Array{Int64,1}:
  6
  2
 10
 10
  8
  6
Run Code Online (Sandbox Code Playgroud)

x->x%2==0是代表查找标准的匿名函数。在特殊情况下,x%2==0可以将其替换为iseven

julia> M[findall(iseven, M)]
6-element Array{Int64,1}:
  6
  2
 10
 10
  8
  6
Run Code Online (Sandbox Code Playgroud)

您还可以利用数组综合来获得所需的内容,它甚至应该更快:

julia> [x for x in M if iseven(x)]
6-element Array{Int64,1}:
  6
  2
 10
 10
  8
  6
Run Code Online (Sandbox Code Playgroud)

最后,也许最理想的选择是使用filter

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