首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia中的Riemann矩阵函数优化

Julia中的Riemann矩阵函数优化
EN

Stack Overflow用户
提问于 2014-10-01 16:58:41
回答 1查看 141关注 0票数 4

我在Julia中实现了一个函数,用于创建大小为N的Riemann矩阵。它是与Riemann假设相关联的N乘N矩阵,当且仅当:

DET(A) = O( N! N^(-1/2+epsilon))对于每个epsilon > 0DET()表示行列式,!表示阶乘。

其中,A= Riemann矩阵

A = B(2:N+1, 2:N+1),在哪里

代码语言:javascript
复制
B(i,j) = i-1 if i divides j, and
          -1 otherwise.

下面是我的代码,它工作得很好,但需要优化:

代码语言:javascript
复制
function riemann(x::Int32)
    R = zeros(Int32,x+1,x+1)
    for i=1:x+1, j=1:x+1
        if j%i == 0
           R[i,j] = i-1
        else
           R[i,j] = -1
        end
    end
    return R[2:x+1,2:x+1]
end

希望,我需要用一种更有效的形式来编写它,比如:

代码语言:javascript
复制
function riemann!{T}(R::AbstractMatrix{T}, x::T)
.
.
.

如有任何建议,敬请见谅。

编辑:

这是我上面建议的另一种表格。我对原始代码进行计时,发现没有速度增益。

代码语言:javascript
复制
function calc_riemann!{T}(R::AbstractMatrix{T}, x::T)
    for i=1:x+1, j=1:x+1
        if j%i == 0
           R[i,j] = i-1
        else
           R[i,j] = -1
        end
    end
end
function riemann(x::Int)
    R = Array(Int, x+1,x+1)
    calc_riemann!(R, x)
    y = R[2:x+1,2:x+1]
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-01 18:52:56

通过删除所有的测试(我们只需步进倍数),这样做的速度要快得多。

代码语言:javascript
复制
function my_riemann(x::Int)
    R = Array(Int,x+1,x+1)
    fill!(R,-1)
    for i=2:x+1
        for j=i:i:x+1
            R[i,j] = i - 1
        end
    end
    return R[2:x+1,2:x+1]
end

编辑

是的,分配适当大小的Array,而不是复制它,会大大加快速度。看看您在这个版本上的时间是否大大减少了。

代码语言:javascript
复制
function my_riemann2(x::Int)
    R = Array(Int,x,x)
    fill!(R,-1)
    for i=1:x
        for j=i:i+1:x
            R[i,j] = i
        end
    end
    return R
end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26146552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档