问题标签 [numpy-random]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2565 浏览

python - Zipf 分布:如何使用 Python / Numpy 测量 Zipf 分布

我有一个大约 700 行的文件(比如说 corpus.txt),每行包含以 . 分隔的数字-。例如:

首先我需要从文件中读取数据,找到每个数字的频率,测量这些数字的 Zipf 分布,然后绘制分布图。我已经完成了任务的前两部分。我一直在绘制 Zipf 分布。

我知道numpy.random.zipf(a, size=None)应该用于此。但我发现它非常难以使用。任何指针或代码片段都会非常有帮助。

代码:

0 投票
1 回答
679 浏览

pandas - 如何从 numpy.random.multivariate_normal 中正确采样(正半定协方差矩阵问题)

我希望从我已经拥有的数据中生成新的“假”数据numpy.random.multivariate_normal

在 nxd pandas DataFrame 中有 n 个样本和 d 个特征:

这看起来不错,但协方差矩阵covariances不是半正定的,这是numpy.random.multivariate_normal.

然而,维基百科说

此外,每个协方差矩阵都是半正定的。

这让我想知道pandas.DataFrame.cov是否为您提供了一个真正的协方差矩阵。这是函数的实现。它似乎主要遵循 numpy.cov,它似乎也承诺了一个协方差矩阵。

有人可以帮我解决这个问题吗?为什么pandas.DataFrame.covs()不是半正定的?

更新的问题:

从第一个答案来看,似乎所有的负特征值都很小。该答案的作者建议裁剪这些特征值,但我仍然不清楚如何使用这些信息合理地生成适当的协方差矩阵。

我可以想象使用pd.DataFrame.cov(),进行特征分解以获得特征向量和值,裁剪值,然后将这些矩阵相乘以获得新的协方差矩阵,但这似乎很不稳定。这是在实践中完成的,还是有更好的方法?

0 投票
2 回答
289 浏览

python - 在没有for循环的情况下围绕一组坐标生成随机数

我有一组坐标平均值(3D)和一组标准偏差(3D),如下所示:

所以问题是 N x 3

我希望使用 np.random.normal() 随机生成 1000 个坐标样本集 (N x 3 x 1000)。目前我使用 for 循环生成样本:

但是我觉得我可以失去 for 循环并让 numpy 更快地完成一次调用,有人知道我应该如何编码吗?

0 投票
1 回答
2332 浏览

python - 向 numpy 数组添加噪声的最快方法

我有一个代表图像的 numpy.ndarray,我想向它添加随机噪声。我已经做了一些测试,到目前为止,我最快的解决方案是:

但是当我有大图像/数组时,这个解决方案仍然太慢了。最快的方法是什么?

0 投票
1 回答
1067 浏览

python - 在 numpy 的 np.random.RandomState 和 Python 的 random.Random 之间进行转换?

我希望能够在 Python 的标准 Random 和 numpy 的 np.random.RandomState 之间来回转换。这两个都使用 Mersenne Twister 算法,所以应该是可能的(除非他们使用该算法的不同版本)。

我开始研究这些对象的 getstate/setstate 和 get_state/set_state 方法。但我不确定如何转换它们的细节。

检查我看到的每个状态:

第一个状态是一个大小为 5 的元组,带有len(state1[1]) = 624.

第二个状态是一个大小为 3 的元组len(state2[1]) = 625。看起来 state2 中的最后一项实际上是 state1 中的 624,这意味着数组实际上是相同的大小。到目前为止,一切都很好。这些似乎相当兼容。

不幸的是,内部数字没有明显的对应关系,因此种子 0 会导致不同的状态,这是有道理的,因为rng1.rand() = .548rng2.random() = .844。所以,算法似乎略有不同。

但是,我不需要它们完美对应。我只需要能够确定地设置一个 rng 的状态而不影响第一个的状态。

理想情况下,一旦我使用第一个的状态设置第二个的状态,而不调用任何随机方法,然后使用第二个设置第一个的状态,第一个状态将保持不变,但这不是要求.

目前我有一个破解方法,它只是交换我可以从两个 rng 中提取的 624 长度列表。但是,我不确定这种方法是否有任何问题。任何对这个主题更了解的人都可以提供一些启示吗?

这是我的方法,但我不确定它是否正常工作。


编辑:

做一些调查,我检查了 10 次调用随机函数时状态的变化。

我希望每个元组中的第一项只是他们使用的算法的版本。

有趣的是,624 个整数似乎没有变化。总是这样吗?

但是,我仍然不确定 Python 版本中最后的 None 是什么意思,而最后的 2 个数字在 numpy 版本中是什么意思。

0 投票
1 回答
333 浏览

python-3.x - 在有限数量的随机位置填充一个 zeros 数组,除了对角线位置

我有一个 2D numpy 数组,它的 (N,N) 大小只有 0。我随机想在这个数组中插入 12 个 1,同时保持对角线位置的值等于 0。到目前为止我尝试过的是:

我得到的输出是一个充满 1 的 N,N 数组。数量达到 12 个后,我无法停止插入 1。我该如何解决?

0 投票
3 回答
1153 浏览

python - 为什么这个小片段在使用 maxtasksperchild、numpy.random.randint 和 numpy.random.seed 的多处理时会挂起?

我有一个 python 脚本,它以随机方式同时处理 numpy 数组和图像。为了在生成的进程中有适当的随机性,我将一个随机种子从主进程传递给工作人员,以便他们被播种。

当我使用maxtasksperchildfor 时Pool,我的脚本在运行后挂起Pool.map多次后挂起。

以下是重现问题的最小片段:

这是输出

然后无限期挂起。

我可能会numpy.random用 python替换random并摆脱这个问题。然而,在我的实际应用程序中,工作人员将执行我无法控制的用户代码(作为工作人员的参数),并希望允许numpy.random在该用户代码中使用函数。所以我有意为全局随机生成器播种(每个进程独立)。

这是用 Python 2.7.10、numpy 1.11.0、1.12.0 和 1.13.0、Ubuntu 和 OSX 测试的

0 投票
2 回答
594 浏览

python - 以相等的概率从 Pandas 组中随机选择——意外行为

我有 12 个独特的组,我试图从中随机抽样,每个组都有不同数量的观察值。我想从整个人口(数据框)中随机抽样,每组具有相同的被选中概率。最简单的示例是具有 2 个组的数据框。

usingnp.random.choice(df['groups'], p=df['probability'], size=100)每次迭代现在将有 50% 的选择机会group a和 50% 的选择机会group b

为了得出概率,我使用了以下公式:

或在 Python 中:

哪个返回

这很有效,直到我超过 10 个独特的组,之后我开始得到奇怪的分布。这是一个小例子:

直方图

我希望样本量足够大的分布相当均匀,但是当组数为 11+ 时,我会得到这些翅膀。如果我将group_size变量更改为 10 或更低,我确实得到了所需的均匀分布。

我不知道问题出在我的概率计算公式上,还是出在浮点精度问题上?任何人都知道完成此操作的更好方法,或此示例的修复方法?

提前致谢!

0 投票
0 回答
64 浏览

python - 随机生成器的防弹播种,以确保 Python 中的计算可重复性

我的目的是创建一个关于如何在 Python 中进行可重现计算的指南(如果可能,不管环境、操作系统等)。然而,生成随机数的问题一直在我脑海中浮现。我正在努力寻找一种防弹方法(如果有的话)。

如何使随机生成器的输出可重现的标准方法是使用

据我所知,种子的自动选择取决于系统。(请参阅Python 中的random.seed文档。)

因此,更好的方法是使用特定的数字来播种生成器。

但是,有些库不使用内置 random 而是使用numpy.random. 因此,您还需要播种numpy的生成器。

内置random作为单例工作,我想numpy.random以相同的方式工作。这意味着您设置一次种子,然后在任何地方使用它。

我想创建一个代码片段,您可以在代码开头使用它,这将确保随机生成器的计算可重复性。

有没有更好的方法,然后结合两个生成器并设置两个种子,甚至可能保持跨操作系统的可重复性?您是否熟悉任何广泛使用的伪随机生成器,应该将其添加到内置随机生成器和 numpy 随机生成器中以使代码片段尽可能通用?

0 投票
2 回答
230 浏览

python - 直接访问 Numpy RandomState 对象的方法

RandomState除了访问导入时创建的对象,还有更直接的方法np.random.<some function>.__self__吗?两者兼而有之。np.random._rand_ 前者工作正常,但似乎不是很透明/Pythonic,尽管最透明的可能只是创建一个单独的对象。目的是将变量传递给直接调用 randomkit 函数的 cython 函数。 getattr(np.random, "_rand")AttributeErrorRandomStateinteral_state