小编Don*_*Don的帖子

从Julia中的短向量快速随机选择

我有一个简单的函数出现在我的Julia代码中的几个地方,并且在循环中运行了数百万次.该函数基本上就是这样rand([1,-1,im,-im]),它选择了四个可能给定值中的一个.我注意到这个函数在我的庞大循环中需要花费大量时间,因此,我尝试以稍快的方式编写它:

function qpsk()
  temp1 = ifelse(rand(Bool), 1+0im, -1+0im)
  temp2 = ifelse(rand(Bool), 1+0im,  0+1im)
  temp1*temp2
end
Run Code Online (Sandbox Code Playgroud)

然后,它通常像这样调用:

sig = complex(zeros(N))
for i = 1:N
  sig[i] = qpsk()
end
Run Code Online (Sandbox Code Playgroud)

现在,有没有办法进一步优化这个功能,或者使用另一种更快的方法?感谢您的帮助.


对当前答案的评论:

@DanGetz(22行??)的答案并没有解决问题,因为目前,Julia并不像使用显式循环那样擅长向量.另外,我简单的qpsk2(s)下面1行比Dan的原始答案中的那些"神秘"22行代码快2倍(创建了一个矢量,这增加了更多的时间).

但问题仍然存在,为什么他们没有实现类似qpsk1下面的东西?为什么我的原始qpsk分支比qpsk4(s)下面的直接快3倍?

如果有经验的人喜欢参加,我在下面添加了更多版本来指导讨论.

qpsk1(s) = s[1+(rand(Int8)&3)]          # Blazingly fast
qpsk2(s) = s[1+rand(Bool)+2rand(Bool)]  # Very fast
qpsk3(s) = s[rand(1:4,1)]               # Compiler issue here?
qpsk4(s) = s[rand(1:4)]                 # Why slow?
qpsk5(s) = rand([s])                    # Ridiculously slow!!
function test_orig(n)                   # Test qpsk(), very fast(branching!), …
Run Code Online (Sandbox Code Playgroud)

random performance julia

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

标签 统计

julia ×1

performance ×1

random ×1