python - 为 random.normal 生成器形状冲突迭代 Numpy 数组
问题描述
我正在尝试从 PyMc3 模型(在本例中为 350)的多个采样均值和标准偏差的正态分布中生成 n 个(在本例中为 n=57)随机数。所以我最终希望得到 350 个长度为 57 的分布。我确信这是直截了当的事情,我缺乏概念上的理解。输入是:
prior_pc5 =pm.sample_prior_predictive(samples=350,model=model_5,
var_names='μ','σ'],random_seed=21)
n=57
prpc5_μ = np.asarray(prior_pc5['μ'])
prpc5_σ = np.asarray(prior_pc5['σ'])
for x,y in np.nditer([prpc5_μ,prpc5_σ]):
y_prpc5 = np.random.normal(prpc5[:,0],prpc5[:,1], size=n)
输出是:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-180-90195f458d14> in <module>
1 for x,y in np.nditer([prpc5_μ,prpc5_σ]):
----> 2 y_prpc5 = np.random.normal(prpc5[:,0],prpc5[:,1], size=n)
mtrand.pyx in numpy.random.mtrand.RandomState.normal()
_common.pyx in numpy.random._common.cont()
_common.pyx in numpy.random._common.cont_broadcast_2()
__init__.pxd in numpy.PyArray_MultiIterNew3()
ValueError: shape mismatch: objects cannot be broadcast to a single shape
欣赏你能提供的任何启迪。
解决方案
你的nditer
循环对你没有任何作用。你甚至不使用x,y
变量。prpc5
变量未定义。并且没有尝试积累y_prpc5
价值。
如果您需要迭代某些东西,请从简单的迭代开始。不要尝试使用nditer
(除非您可以阅读并理解其所有文档)。它并没有更快,也更难正确使用。
但错误与nditer
.
np.random.normal(prpc5[:,0],prpc5[:,1], size=n)
不使用任何迭代变量。
带有标量参数的大小:
In [63]: np.random.normal(1,2,size=57)
Out[63]:
array([-0.15095176, 0.68354153, 0.64270214, 1.71539129, 3.82930345,
-0.93888021, 0.34013012, 4.7390541 , 1.95647694, -0.02787572,
0.53790931, 3.64859278, -2.66455301, -1.81567149, 2.62141742,
-0.22887411, -0.36284743, 2.92298403, 1.87943503, 2.12060767,
-1.10172555, 0.04234386, 0.48707306, 5.66358341, 0.70659526,
-0.74210809, -2.04678512, -0.16496427, -0.46041457, 0.50505178,
1.66497518, 2.20486689, 1.83034991, -1.73740446, -3.117619 ,
1.12649528, 2.58059286, 1.42897399, 2.37256695, -2.34670202,
3.00318398, 2.78164509, -1.1329154 , 4.06859674, 3.13266299,
-0.35481326, 1.79429889, 1.71617491, 1.41543611, 0.9476942 ,
-0.79856396, -0.83121952, -2.63145461, 0.13941223, 0.18895024,
3.21956521, -2.75348353])
具有大小的数组/列表参数:
In [64]: np.random.normal([1,2],[1,1],size=57)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-64-9a493d59b8d2> in <module>
----> 1 np.random.normal([1,2],[1,1],size=57)
mtrand.pyx in numpy.random.mtrand.RandomState.normal()
_common.pyx in numpy.random._common.cont()
_common.pyx in numpy.random._common.cont_broadcast_2()
__init__.pxd in numpy.PyArray_MultiIterNew3()
ValueError: shape mismatch: objects cannot be broadcast to a single shape
如果 size 与前两个参数的大小匹配,则可以:
In [65]: np.random.normal([1,2],[1,1],size=2)
Out[65]: array([1.91404732, 2.79305575])
推荐阅读
- java - Java OPENCV 模板匹配给出了错误的坐标?
- java - 为什么我的预减量没有按预期工作?
- c# - 想在 c# selenium 驱动程序中访问动态 id
- java - Spring Social Facebook - 找不到“Facebook”类型的 bean
- android - WebView 类,文件下载问题
- ionic3 - 如何将 ionic 3 转换为 swift 代码?
- jsf - 警告:此页面调用以前缀 t 声明的 XML 命名空间 http://xmlns.jcp.org/jsf/component 但该命名空间不存在标记库
- excel - Excel noob需要帮助使用excel公式用不同的值替换中间值
- python - Python:减少 for 循环的运行时间
- php - R 和 PHP 的新手尝试将表单数据重定向到 R 脚本