【问题标题】:MethodError: no method matching /(::Int64,::Array{Int64,1}) when generating random numbers based on Normal Distribution in JuliaMethodError: no method matching /(::Int64,::Array{Int64,1}) 在 Julia 中基于正态分布生成随机数时
【发布时间】:2017-04-11 13:18:52
【问题描述】:

我需要从正态分布构造一个随机数的多元素数组(为此使用“分布”包)。我正在使用下面的代码。

[rand(Distributions.Normal(0,a[end]+0.5*(1-b[n])),c,length(b[1,:])*d[n]/c) for n=1:length(b)]

哪里(我在这个例子中使用随机数):

a=rand(10)
b=rand(5,32)
c=5
d=collect(1:32)

当我运行代码时,我收到以下错误消息:

MethodError: 没有方法匹配 /(::Int64,::Array{Int64,1})

关于如何让它发挥作用的任何想法?

感谢您的帮助。

-亚历杭德罗·布劳恩

编辑: 我将 d 更改为 collect(1:32)。我在输入问题时犯了一个错误,对于由此可能造成的任何混乱,我深表歉意。

【问题讨论】:

  • 该错误消息仅表示您正在尝试将整数与数组相除...大概您打算做相反的事情?话虽如此,当我尝试在上面运行您的代码时,我收到一条完全不同的错误消息(no method matching rand(::Distributions.Normal{Float64}, ::Int64, ::Float64))(即,您在定义随机数组的大小时尝试使用 Float 而不是 Int试图生成);大概是因为 julia 会自动将 int-by-int 除法的结果转换为浮点数。
  • 你想得到什么形状?您不能将浮点数作为尺寸之一?!
  • 代码似乎没有以给定的形式运行。例如,d[n] 是浮点小数,乘以 rand 生成的矩阵的宽度。
  • 我进行了编辑,对于造成的任何混淆,我们深表歉意。 "d" 应该是 collect(1:5) 而不是 rand(5)。谢谢大家的帮助!

标签: arrays random julia


【解决方案1】:

不是 100% 确定你要做什么,但如果你强制数组大小为整数,它会给你一些东西(如果你改变数组 d 的大小)...更多信息?

a=rand(10)
b=rand(5,32)
c=5
d=rand(5,32);

[rand(Normal(0,a[end]+0.5*(1-b[n])),c,floor(Int,length(b[1,:])*d[n]/c)) for n=1:length(b)]

【讨论】:

  • Alexander,“地板”正是我想要的。我错误地说 d 是一组随机数(这是我的错误),但您的代码创建了正确的数组。
猜你喜欢
  • 2021-09-21
  • 2020-07-05
  • 1970-01-01
  • 2021-04-26
  • 2016-06-04
  • 2018-06-22
  • 1970-01-01
  • 2017-04-17
  • 2015-03-22
相关资源
最近更新 更多