Types Hcat和vcat返回错误的类型

Types Hcat和vcat返回错误的类型,types,julia,Types,Julia,网上的人们好 我几乎完全是编程新手,我使用Julia进行小量子物理模拟。基本上我构造矩阵并使用Julia对它们进行对角化。直到昨天,我还使用了“JuliaPro”,它工作得很好,但有些事情让我很恼火,所以我卸载了它,下载了Atom编辑器和最新的Julia命令行版本(v0.6.1) 在可能相关的情况下: 在尝试使用“using PyPlot”时,我必须首先添加包,并遇到下面描述的错误: 我重新安装了一些软件包,并切换到Anaconda,如下所述: 现在谈谈实际问题。我有一个函数,在这个函数中,我使

网上的人们好

我几乎完全是编程新手,我使用Julia进行小量子物理模拟。基本上我构造矩阵并使用Julia对它们进行对角化。直到昨天,我还使用了“JuliaPro”,它工作得很好,但有些事情让我很恼火,所以我卸载了它,下载了Atom编辑器和最新的Julia命令行版本(v0.6.1)

在可能相关的情况下: 在尝试使用“using PyPlot”时,我必须首先添加包,并遇到下面描述的错误:

我重新安装了一些软件包,并切换到Anaconda,如下所述:

现在谈谈实际问题。我有一个函数,在这个函数中,我使用hcat()和vcat()从较小的2d数组构建一个较大的矩阵。函数如下所示:

function InfiniteHamil(E, EA, EAB, FA_list, FB_list, d_list, ϵ_list)
    #------------------------------ 
    num_steps = 200
    x_values  = collect(0:1/num_steps:1)
    y_values  = []

    #------------------------------
    for x in x_values
        k   = path(x)
        z1  = exp(im*k[1])
        z2  = exp(im*k[1]/2)*exp(im*sqrt(3)*k[2]/2)
        c1  = cos(k[1])
        c2  = cos(k[1]/2 + k[2]*sqrt(3)/2)
        c12 = cos(k[1]/2 - k[2]*sqrt(3)/2)

        secondHam = vcat( hcat(E+ 2*(c1*d_list[1] + c2*d_list[2]+ c12*d_list[5]),
                            FA_list[1]+ conj(z2)*(FA_list[2]+z1*FA_list[3]),
                            FB_list[1]+ conj(z2)*(FB_list[2]+z1*FB_list[3])),
                      hcat((FA_list[1]+ conj(z2)*(FA_list[2]+z1*FA_list[3]))',
                            EA+ 2*( c1*ϵ_list[1]+c2*ϵ_list[2]+c12*ϵ_list[5]),
                            EAB ),
                      hcat((FB_list[1]+ conj(z2)*(FB_list[2]+z1*FB_list[3]))',
                            EAB',
                            EA+ 2*( c1*ϵ_list[1]+c2*ϵ_list[2]+c12*ϵ_list[5]) ))

        #print types of constituents
        println(typeof(E+ 2*(c1*d_list[1] + c2*d_list[2]+ c12*d_list[5])))
        println(typeof(FA_list[1]+ conj(z2)*(FA_list[2]+z1*FA_list[3])))
        println(typeof(FB_list[1]+ conj(z2)*(FB_list[2]+z1*FB_list[3])))
        println(typeof((FA_list[1]+ conj(z2)*(FA_list[2]+z1*FA_list[3]))'))
        println(typeof(EA+ 2*( c1*ϵ_list[1]+c2*ϵ_list[2]+c12*ϵ_list[5])))
        println(typeof(EAB ))
        println(typeof((FB_list[1]+ conj(z2)*(FB_list[2]+z1*FB_list[3]))'))
        println(typeof(EAB' ))
        println(typeof(EA+ 2*( c1*ϵ_list[1]+c2*ϵ_list[2]+c12*ϵ_list[5])))
        println(typeof(secondHam))

        push!(y_values ,  filter(x -> x > -10, sort(real(eigvals(secondHam))) ))

    end
    #------------------------------ 
    y_values = hcat(y_values...)
    plotData(x_values,y_values)
end
作为输出,我得到:


基本上,我只连接数组,但不知怎的,我的结果变成了一个稀疏矩阵。。。这在重新安装之前没有发生(使用完全相同的代码)。谁能告诉我这里发生了什么事吗?

所以。。我自己解决了,但我不知道确切的问题。然而,这与我的输出中显示的“对角线”类型有关。使用diagm()而不是Diagonal()时,不会出现错误

对角线([1,2,3])
的输出类型与
diagm([1,2,3])
不同。还要注意,前者是构造函数,而后者是函数。类型,更一般地说,多分派是Julia语言的核心。评论并不是深入探讨这一问题的好地方,所以我会站不住脚,建议你仔细阅读官方文件。这将花费大量的时间,但是,由于我自己来自其他几种不太令人满意的编程语言,我保证这是值得的。我试着阅读了一些官方文档,但我发现它们几乎没有什么教育意义,因为它们经常错过我不知道的术语的解释。你能为Julia推荐什么补充信息吗?我发现官方文档非常好,但我的背景是Matlab、Python、R和.NET。如果你是一个编程新手,你能做的最好的事情就是继续在Julia中工作,并且任何时候你不确定什么事情,检查文档,检查堆栈溢出,如果你仍然找不到好的资源,在这里或网站上询问。注意,它有一个“第一步”标签。这样做一年,你将在年底回答这里的问题