小编Abo*_*mar的帖子

如何从 Julia 的对角矩阵中提取对角元素数组?

给定 Julia 中的一些对角矩阵,例如A = Diagonal(rand(3,3)),有什么方法可以创建一个一维数组,其元素是这个对角矩阵的对角线条目A

matrix linear-algebra numerical-methods julia

4
推荐指数
1
解决办法
3055
查看次数

运行julia功能的巨大内存分配?

我尝试在julia命令中运行以下函数,但是在对函数进行计时时,我看到了太多的内存分配,我无法弄清楚为什么.

function pdpf(L::Int64, iters::Int64)
snr_dB = -10 
snr = 10^(snr_dB/10) 
Pf = 0.01:0.01:1      
thresh = rand(100)
Pd     = rand(100)

for m = 1:length(Pf)
    i = 0
    for k = 1:iters 
        n = randn(L) 
        s = sqrt(snr) * randn(L) 
        y = s + n 

        energy_fin = (y'*y) / L
        @inbounds thresh[m] = erfcinv(2Pf[m]) * sqrt(2/L) + 1

        if energy_fin[1] >= thresh[m]
            i += 1   
        end
    end
    @inbounds Pd[m] = i/iters
end

#thresh = erfcinv(2Pf) * sqrt(2/L) + 1
#Pd_the = 0.5 …
Run Code Online (Sandbox Code Playgroud)

performance julia

2
推荐指数
1
解决办法
602
查看次数

为什么我的程序返回不准确的结果?

在我最初在MATLAB中编写(并优化)它之后,我在Fortran中编写了着名的谱 - 范数算法.天真转换到Fortran之后的加速至少是18倍,但问题是Fortran程序的输出不准确.正确的输出应该是1.274224153我的Fortran程序输出1.273722712,我在Fortran中做错了什么?

program perf_spectralnorm
implicit none
integer, parameter :: n = 5500, dp = kind(0.d0) 
real(dp) :: u(n) = 1, v(n), w(n), vBv, vv, res
integer  :: i, j, nvec(n)

nvec = [(i, i=1,n)]
do i = 1,10
   call Au(w, u)   ! change w
   call Atu(v, w)  ! change v
   call Au(w, v)   ! change w
   call Atu(u, w)  ! change u
end do
vBv = dot_product(u, v) 
vv  = dot_product(v, v)
res …
Run Code Online (Sandbox Code Playgroud)

matlab fortran subroutine

2
推荐指数
1
解决办法
203
查看次数

Julia语言中的Generic Float类型?

我的问题很简单,Float朱莉娅有一个通用的类型吗?例如Integer,对于s 的情况,可以简单地编写Int,并且将Int32在32位系统或Int6464位系统中进行转换.但是对于Floats,请参阅下面的示例函数:

function bb(n)
    b = Array{Float64}(n) 
    b[1] = 0.9999
    for i = 2:n
        @inbounds b[i] = b[i-1] * 0.9999
    end    
    println(b[n])
end

bb(10^3)
@time bb(10^3)
@time bb(10^8)
Run Code Online (Sandbox Code Playgroud)

它提供以下时序结果以及总内存分配:

0.9048328935585562
0.9048328935585562
  0.000100 seconds (135 allocations: 15.750 KB)
2.4703e-320
  3.230642 seconds (14 allocations: 762.940 MB, 1.51% gc time)
Run Code Online (Sandbox Code Playgroud)

现在将第一行更改为b = Array{AbstractFloat}(n)并查看可笑的巨大时序和内存分配:

0.9048328935585562
0.9048328935585562
  0.003564 seconds (2.13 k allocations: 46.953 KB)
2.4703e-320
  351.068176 seconds (200.00 M allocations: 3.725 …
Run Code Online (Sandbox Code Playgroud)

types julia

0
推荐指数
1
解决办法
436
查看次数