Matrix 在Julia中,如何将矩阵中的偶数放在独立向量中?
我正在解决Julia中的一些矩阵问题,我需要把可以从矩阵中除以2(或任何其他数字)的数字放在单独的向量中。一般来说,当我需要从矩阵中分离出可以用2、3或4等分的数字时,我不能正确地索引它们。基本上,我需要Julia等效的Matlab命令: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); 我希望输出是可以用某个数除的数字向量,但在第一种情况下,
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