Julia 如何从矩阵中选择奇数?

Julia 如何从矩阵中选择奇数?,julia,Julia,如何从大于29的矩阵中选择奇数?您可以使用: filter(x->isodd(x)和&x>29,M) 在这里,x->isodd(x)&&x>29是一个指定过滤标准的函数,M是一个矩阵 例如: 或者,您可以使用: 只是吹毛求疵,但您可能不应该在匿名函数中使用&&&短路,这意味着它引入了一个分支,与isodd和操作相比,分支速度较慢。在您的示例中,将&&替换为&,我在1000x1000矩阵上获得了几乎3倍的速度提升。但它们的计算结果不一样吗?将isodd(31)和&31>29与isodd(31)和&

如何从大于29的矩阵中选择奇数?

您可以使用:

filter(x->isodd(x)和&x>29,M)

在这里,
x->isodd(x)&&x>29是一个指定过滤标准的函数,
M
是一个矩阵

例如:

或者,您可以使用:


只是吹毛求疵,但您可能不应该在匿名函数中使用
&&
<代码>&
短路,这意味着它引入了一个分支,与
isodd
操作相比,分支速度较慢。在您的示例中,将
&&
替换为
&
,我在1000x1000矩阵上获得了几乎3倍的速度提升。但它们的计算结果不一样吗?将
isodd(31)和&31>29
isodd(31)和&31>29
进行比较。由于运算符优先级,只需正确插入括号:
isodd(31)和(31>29)
。参见
Base.operator\u priority(:&)
Base.operator\u priority(:>)
@crstnbr,它们计算相同的内容,但比较
&
&
生成的汇编指令。前者中有跳转指令,而不是后者。但同样,这取决于你的微秒有多宝贵:)也有可能使用逻辑索引:
M[isodd.(M.&(M.>29)]
。哪种方法更有效可能会有很大的不同。
julia> M = rand(1:50, 3,3)
3×3 Array{Int64,2}:
 20  42  35
 23   6  31
 28   4   4

julia> filter(x->isodd(x)&&x>29, M)
2-element Array{Int64,1}:
 35
 31
julia> [x for x in M if isodd(x) && x>29]
2-element Array{Int64,1}:                
 35                                      
 31