有人可以解释如何在 Python 代码片段中处理数组和标量吗
Can someone explain how arrays and scalars are handled in a Python code snippet
我有这个代码片段,我试图理解它在 python 中。我不明白标量在所有情况下如何对数组进行操作。在我读到的大多数代码中,对数组的每个值进行操作是有道理的。
sig_sq_samples = beta*invgamma.rvs(alpha,size=n_samples)
var_norm = sqrt(sig_sq_samples/kN)
mu_samples = norm.rvs(mean_norm,scale=var_norm,size=n_samples)
我想知道每条线路是如何运作的。原因是我没有带库的 linux 机器设置,我认为有人可以帮助我理解我在一篇文章中找到的这段 python 代码。我无法在合理的时间内设置环境。
invgamma.rvs() - returns an array of numeric values
beta - is a scalar value
sig_sq_samples (I'm assuming)- is an array of beta * each array value of
what invgamma.rvs() function returns.
var_norm - I have no idea what this value is supposed to be because
the norm.rvs function underneath takes a scalar (scale=var_norm).
简而言之,带有 kN 的 sqrt(siq_sq_samples/kn) 是如何返回一个标量的?这里发生了什么?这条线让我着迷。就像我之前说的 sig_sq_samples 是一个数组。我希望我对正在生成 sig_sq_samples 的那条线没有错。在某一时刻,正在处理的值是标量。我来自使用硬类型的 c#,我曾使用过 PERL 等脚本语言,在这些语言中我对 "shortcut" 操作有很多经验。前任。 C# 不允许将标量乘以数组。我试图查看标量如何与数组一起使用,但它并没有向我阐明这段代码。任何回答的人都非常欢迎查看上面的功能,以防我有任何错误。我付出了很多努力,并且拥有多年的开发经验。要么这个代码片段是错误的,要么我只是没有看到真正明显的东西。
在行
mu_samples = norm.rvs(mean_norm,scale=var_norm,size=n_samples)
n_samples
与 var_norm
具有相同的大小,因此发生的情况是对于 n_samples
的第 i 个样本,它使用 [=12] 的第 i 个比例参数生成它=], var_norm[i]
代码的内部是
vals = vals * scale + loc
,当 scale 是一个数组时,它使用广播,这是 numpy 的一个共同特征。 norm.rvs
已经生成了一个包含 n_samples
个随机值的数组。当乘以 scale
时,它会在每个数组之间进行逐元素乘法。结果是左侧也将是一个数组值。有关详细信息,请参阅 here
sig_sq_samples = beta*invgamma.rvs(alpha,size=n_samples)
如果
invgamma.rvs() - returns 数值数组
beta - 是标量值
然后
sig_sq_samples = beta*invgamma.rvs(alpha,size=n_samples)
生成另一个相同大小的数组。标量 beta
只是将每个元素相乘。
在
var_norm = sqrt(sig_sq_samples/kN)
kN
是做同样事情的标量 - 除每个元素。我假设 sqrt
是 numpy.sqrt
,它采用每个元素的平方根。所以 var_norm
又是一个原始大小的数组(invgammas.rvs()
)。
mu_samples = norm.rvs(mean_norm,scale=var_norm,size=n_samples)
我不知道 norm.rvs
是做什么的,也不知道它来自哪里。它不是 numpy
,但可能是 scipy
中的一个包。我必须 google 它。它需要一个位置参数,此处为 mean_norm
,以及两个(至少)关键字值。 n_samples
可能是一个数字,例如。 100. 但是 scale
当然可以取数组,例如 var_norm
.
======================
似乎是 rvs
方法的文档(norm
是 rv_continuous
的子类)。
参数是:
arg1, arg2, arg3,... : array_like
The shape parameter(s) for the distribution (see docstring of the instance object for more information).
scale : array_like, optional
Scale parameter (default=1).
size : int or tuple of ints, optional
Defining number of random variates (default is 1).
结果是
rvs : ndarray or scalar
Random variates of given size.
我猜 invgamma.rvs
是不同子类的类似方法。 alpha
必须是第一个的 shape
参数,norm_mean
是第二个的形状。
我有这个代码片段,我试图理解它在 python 中。我不明白标量在所有情况下如何对数组进行操作。在我读到的大多数代码中,对数组的每个值进行操作是有道理的。
sig_sq_samples = beta*invgamma.rvs(alpha,size=n_samples)
var_norm = sqrt(sig_sq_samples/kN)
mu_samples = norm.rvs(mean_norm,scale=var_norm,size=n_samples)
我想知道每条线路是如何运作的。原因是我没有带库的 linux 机器设置,我认为有人可以帮助我理解我在一篇文章中找到的这段 python 代码。我无法在合理的时间内设置环境。
invgamma.rvs() - returns an array of numeric values
beta - is a scalar value
sig_sq_samples (I'm assuming)- is an array of beta * each array value of
what invgamma.rvs() function returns.
var_norm - I have no idea what this value is supposed to be because
the norm.rvs function underneath takes a scalar (scale=var_norm).
简而言之,带有 kN 的 sqrt(siq_sq_samples/kn) 是如何返回一个标量的?这里发生了什么?这条线让我着迷。就像我之前说的 sig_sq_samples 是一个数组。我希望我对正在生成 sig_sq_samples 的那条线没有错。在某一时刻,正在处理的值是标量。我来自使用硬类型的 c#,我曾使用过 PERL 等脚本语言,在这些语言中我对 "shortcut" 操作有很多经验。前任。 C# 不允许将标量乘以数组。我试图查看标量如何与数组一起使用,但它并没有向我阐明这段代码。任何回答的人都非常欢迎查看上面的功能,以防我有任何错误。我付出了很多努力,并且拥有多年的开发经验。要么这个代码片段是错误的,要么我只是没有看到真正明显的东西。
在行
mu_samples = norm.rvs(mean_norm,scale=var_norm,size=n_samples)
n_samples
与 var_norm
具有相同的大小,因此发生的情况是对于 n_samples
的第 i 个样本,它使用 [=12] 的第 i 个比例参数生成它=], var_norm[i]
代码的内部是
vals = vals * scale + loc
,当 scale 是一个数组时,它使用广播,这是 numpy 的一个共同特征。 norm.rvs
已经生成了一个包含 n_samples
个随机值的数组。当乘以 scale
时,它会在每个数组之间进行逐元素乘法。结果是左侧也将是一个数组值。有关详细信息,请参阅 here
sig_sq_samples = beta*invgamma.rvs(alpha,size=n_samples)
如果 invgamma.rvs() - returns 数值数组 beta - 是标量值
然后
sig_sq_samples = beta*invgamma.rvs(alpha,size=n_samples)
生成另一个相同大小的数组。标量 beta
只是将每个元素相乘。
在
var_norm = sqrt(sig_sq_samples/kN)
kN
是做同样事情的标量 - 除每个元素。我假设 sqrt
是 numpy.sqrt
,它采用每个元素的平方根。所以 var_norm
又是一个原始大小的数组(invgammas.rvs()
)。
mu_samples = norm.rvs(mean_norm,scale=var_norm,size=n_samples)
我不知道 norm.rvs
是做什么的,也不知道它来自哪里。它不是 numpy
,但可能是 scipy
中的一个包。我必须 google 它。它需要一个位置参数,此处为 mean_norm
,以及两个(至少)关键字值。 n_samples
可能是一个数字,例如。 100. 但是 scale
当然可以取数组,例如 var_norm
.
======================
似乎是 rvs
方法的文档(norm
是 rv_continuous
的子类)。
参数是:
arg1, arg2, arg3,... : array_like
The shape parameter(s) for the distribution (see docstring of the instance object for more information).
scale : array_like, optional
Scale parameter (default=1).
size : int or tuple of ints, optional
Defining number of random variates (default is 1).
结果是
rvs : ndarray or scalar
Random variates of given size.
我猜 invgamma.rvs
是不同子类的类似方法。 alpha
必须是第一个的 shape
参数,norm_mean
是第二个的形状。