问题标签 [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.
python - Zipf 分布:如何使用 Python / Numpy 测量 Zipf 分布
我有一个大约 700 行的文件(比如说 corpus.txt),每行包含以 . 分隔的数字-
。例如:
首先我需要从文件中读取数据,找到每个数字的频率,测量这些数字的 Zipf 分布,然后绘制分布图。我已经完成了任务的前两部分。我一直在绘制 Zipf 分布。
我知道numpy.random.zipf(a, size=None)
应该用于此。但我发现它非常难以使用。任何指针或代码片段都会非常有帮助。
代码:
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()
,进行特征分解以获得特征向量和值,裁剪值,然后将这些矩阵相乘以获得新的协方差矩阵,但这似乎很不稳定。这是在实践中完成的,还是有更好的方法?
python - 在没有for循环的情况下围绕一组坐标生成随机数
我有一组坐标平均值(3D)和一组标准偏差(3D),如下所示:
所以问题是 N x 3
我希望使用 np.random.normal() 随机生成 1000 个坐标样本集 (N x 3 x 1000)。目前我使用 for 循环生成样本:
但是我觉得我可以失去 for 循环并让 numpy 更快地完成一次调用,有人知道我应该如何编码吗?
python - 向 numpy 数组添加噪声的最快方法
我有一个代表图像的 numpy.ndarray,我想向它添加随机噪声。我已经做了一些测试,到目前为止,我最快的解决方案是:
但是当我有大图像/数组时,这个解决方案仍然太慢了。最快的方法是什么?
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() = .548
和rng2.random() = .844
。所以,算法似乎略有不同。
但是,我不需要它们完美对应。我只需要能够确定地设置一个 rng 的状态而不影响第一个的状态。
理想情况下,一旦我使用第一个的状态设置第二个的状态,而不调用任何随机方法,然后使用第二个设置第一个的状态,第一个状态将保持不变,但这不是要求.
目前我有一个破解方法,它只是交换我可以从两个 rng 中提取的 624 长度列表。但是,我不确定这种方法是否有任何问题。任何对这个主题更了解的人都可以提供一些启示吗?
这是我的方法,但我不确定它是否正常工作。
编辑:
做一些调查,我检查了 10 次调用随机函数时状态的变化。
我希望每个元组中的第一项只是他们使用的算法的版本。
有趣的是,624 个整数似乎没有变化。总是这样吗?
但是,我仍然不确定 Python 版本中最后的 None 是什么意思,而最后的 2 个数字在 numpy 版本中是什么意思。
python-3.x - 在有限数量的随机位置填充一个 zeros 数组,除了对角线位置
我有一个 2D numpy 数组,它的 (N,N) 大小只有 0。我随机想在这个数组中插入 12 个 1,同时保持对角线位置的值等于 0。到目前为止我尝试过的是:
我得到的输出是一个充满 1 的 N,N 数组。数量达到 12 个后,我无法停止插入 1。我该如何解决?
python - 为什么这个小片段在使用 maxtasksperchild、numpy.random.randint 和 numpy.random.seed 的多处理时会挂起?
我有一个 python 脚本,它以随机方式同时处理 numpy 数组和图像。为了在生成的进程中有适当的随机性,我将一个随机种子从主进程传递给工作人员,以便他们被播种。
当我使用maxtasksperchild
for 时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 测试的
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 或更低,我确实得到了所需的均匀分布。
我不知道问题出在我的概率计算公式上,还是出在浮点精度问题上?任何人都知道完成此操作的更好方法,或此示例的修复方法?
提前致谢!
python - 随机生成器的防弹播种,以确保 Python 中的计算可重复性
我的目的是创建一个关于如何在 Python 中进行可重现计算的指南(如果可能,不管环境、操作系统等)。然而,生成随机数的问题一直在我脑海中浮现。我正在努力寻找一种防弹方法(如果有的话)。
如何使随机生成器的输出可重现的标准方法是使用
据我所知,种子的自动选择取决于系统。(请参阅Python 中的random.seed文档。)
因此,更好的方法是使用特定的数字来播种生成器。
但是,有些库不使用内置 random 而是使用numpy.random
. 因此,您还需要播种numpy
的生成器。
内置random
作为单例工作,我想numpy.random
以相同的方式工作。这意味着您设置一次种子,然后在任何地方使用它。
我想创建一个代码片段,您可以在代码开头使用它,这将确保随机生成器的计算可重复性。
有没有更好的方法,然后结合两个生成器并设置两个种子,甚至可能保持跨操作系统的可重复性?您是否熟悉任何广泛使用的伪随机生成器,应该将其添加到内置随机生成器和 numpy 随机生成器中以使代码片段尽可能通用?
python - 直接访问 Numpy RandomState 对象的方法
RandomState
除了访问导入时创建的对象,还有更直接的方法np.random.<some function>.__self__
吗?两者兼而有之。np.random._rand
_ 前者工作正常,但似乎不是很透明/Pythonic,尽管最透明的可能只是创建一个单独的对象。目的是将变量传递给直接调用 randomkit 函数的 cython 函数。 getattr(np.random, "_rand")
AttributeError
RandomState
interal_state