【问题标题】:Julia Method Error converting Complex{Float64}Julia 方法错误转换 Complex{Float64}
【发布时间】:2014-09-28 23:23:54
【问题描述】:

我是 Julia 的新手,我有以下代码并出现此错误:

MethodError(convert,(Complex{Float64},[-1.0 - 1.0im])).

我想知道错误的来源以及如何优化这段代码以提高速度。

这是我的代码:

function OfdmSym()
N = 64
n = 1000
symbol = convert(Array{Complex{Float64},2},ones(n,64))    # I need Array{Complex{Float64},2}
data   = convert(Array{Complex{Float64},2},ones(1,48))    # I need Array{Complex{Float64},2}

const unused = convert(Array{Complex{Float64},2},zeros(1,12))
const pilot  = convert(Array{Complex{Float64},2},ones(1,4))
const s      = convert(Array{Complex{Float64},2},[-1-im -1+im 1-im 1+im])# QPSK Complex Data

for i=1:n                  # generate 1000 symbols
    for j = 1:48           # generate 48 complex data symbols whose basis is s
          r = rand(1:4,1)  # 1, 2, 3, or 4
          data[j] = s[r]
    end
    symbol[i,:]=[data[1,1:10] pilot[1] data[1,11:20] pilot[2] data[1,21:30] pilot[3] data[1,31:40] pilot[4] data[1,41:48] unused]
end
end

由于这是在 Julia 中编程的第一天,我非常努力地试图找出错误的根源,但没有成功。我还尝试尽可能优化和初始化数组,但是当我计时代码时,我意识到它远非最佳。感谢您的帮助。

【问题讨论】:

    标签: type-conversion compiler-optimization julia


    【解决方案1】:

    试试这个更简单的代码

    function OfdmSym()
        N = 64
        n = 1000
        symbol = ones(Complex{Float64}, n, 64)
        data   = ones(Complex{Float64}, 1, 48)
        unused = zeros(Complex{Float64}, 1, 12)
        pilot  = ones(Complex{Float64}, 1, 4)
        s      = [-1-im  -1+im  1-im  1+im]
    
        for i=1:n                  # generate 1000 symbols
            for j = 1:48           # generate 48 complex data symbols whose basis is s
                  r = rand(1:4)    # 1, 2, 3, or 4
                  data[j] = s[r]
            end
            symbol[i,:]=[data[1,1:10] pilot[1] data[1,11:20] pilot[2] data[1,21:30] pilot[3] data[1,31:40] pilot[4] data[1,41:48] unused]
        end
    end
    
    OfdmSym()
    

    在你让它正常工作之前,我不会太担心优化事情。由于数组的所有切片,您现在设置它的方式似乎效率低下 - 最好尝试直接构建symbol

    【讨论】:

    • 非常干净和直观。我现在得到了上面错误的来源。它是 rand(1:4,1),它返回一个 Int32 数组,而不是像 rand(1:4) 那样返回一个 Int32 类型的元素。您的代码运行良好,但我需要有关优化的建议。你能帮我吗?非常感谢。
    • 你应该接受这个答案,因为它解决了这个问题中的问题,并提出一个关于代码性能的新问题——这样你会得到更好的答案。
    • 我接受了答案,谢谢。但是在优化方面还有什么帮助吗?
    • 我已经在你的新问题中回答了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多