首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia:序列的向量化乘积

Julia:序列的向量化乘积
EN

Stack Overflow用户
提问于 2017-04-05 20:47:04
回答 1查看 93关注 0票数 1

学习从Python传递到Julia,我正在尝试转换我拥有的旧代码,也就是计算这个表达式的序列的乘积:

我用Python语言编写了两个版本的代码,一个使用for循环实现,另一个使用广播。for循环版本为:

代码语言:javascript
复制
import numpy as np
A = np.arange(1.,5.,1)
G = np.array([[1.,2.],[3.,4.]])

def calcF(G,A):
    N = A.size
    print A
    print N
    F = []
    for l in range(N):
        F.append(G/A[l])
        print F[l]
        for j in range(N):
            if j != l:
                F[l]*=((G - A[l])/(G + A[j]))*((A[l] - A[j])/(A[l] + A[j]))
    return F

F= calcF(G,A)
print F

我从我的问题here的回答中了解到的矢量化版本是这个函数:

代码语言:javascript
复制
def calcF_vectorized(G,A):
    # Get size of A
    N = A.size

    # Perform "(G - A[l])/(G + A[j]))" in a vectorized manner
    p1 = (G - A[:,None,None,None])/(G + A[:,None,None])

    # Perform "((A[l] - A[j])/(A[l] + A[j]))" in a vectorized manner
    p2 = ((A[:,None] - A)/(A[:,None] + A))

    # Elementwise multiplications between the previously calculated parts
    p3 = p1*p2[...,None,None]

    # Set the escaped portion "j != l" output as "G/A[l]"
    p3[np.eye(N,dtype=bool)] = G/A[:,None,None]

    Fout = p3.prod(1)

    # If you need separate arrays just like in the question, split it
    return np.array_split(Fout,N)

我尝试天真地将Python for循环代码翻译成Julia:

代码语言:javascript
复制
function JuliacalcF(G,A)
    F = Array{Float64}[]
    for l in eachindex(A)
        push!(F,G/A[l])
        println(A[i])
        for j in eachindex(A)
            if j!=l
                F[l]*=((G - A[l])/(G + A[j]))*((A[l] - A[j])/(A[l] + A[j]))
            end
        end
    end
    #println(alpha)
    return F
end
A = collect(1.0:1.0:5.0)
G = Vector{Float64}[[1.,2.],[3.,4.]]
println(JuliacalcF(G,A))

但是,有没有办法像numpy广播矢量化版本那样聪明地做到这一点呢?

EN

回答 1

Stack Overflow用户

发布于 2017-04-06 00:40:42

此外,还可以查看More-DotsLoop Fusion,其中通过示例描述了矢量化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43231649

复制
相关文章

相似问题

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