- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我处于一种情况,我需要生成一个非常大的(~10^16 个元素)具有特定随机稀疏模式的随机矩阵。显然存储所有这些元素是完全不可行的。在任何给定时间只需要少数元素,因此可以按需绘制它们 - 但是,一旦存储了一个元素,以后可能会需要它,使用相同的值很重要。即,不能丢弃元素并随机重绘 - 一旦绘制了随机元素,就需要将其保存。
根据问题本身,可能有一些聪明的方法可以解决这个问题,我不会讨论。然而,一位同事说,应该可以通过使用伪随机数生成器根据需要确定性地生成这些随机数,种子由矩阵中的索引给出,即使用 i + N*j
作为元素(i, j)
矩阵的大小为 N*N
。这不会调用 rand()
函数,而是使用带有特定参数的底层伪随机函数来确定性地生成先前绘制的随机值。这样就不需要保存任何数字,并且可以根据需要确定性地重新绘制它们。
我对 PRG 的理解是,对于随机出现的数字序列,您必须修复种子。上面的方法有意义吗?在我看来,这就像反复重新播种 PRG 并只取第一个元素。
最佳答案
不是一个精确的答案,但有一些尝试。
散列函数似乎是实现您的目标的一种简单而有效的方法。
Here有一些关于整数到整数哈希函数的好主意。
从这篇文章我尝试:
from numba import uint64, njit
import pylab as pl
@njit(uint64(uint64,uint64))
def hash64(i,j) :
x= i + (j << 32)
x = (x ^ (x >> 30)) * (0xbf58476d1ce4e5b9);
x = (x ^ (x >> 27)) * (0x94d049bb133111eb);
x = x ^ (x >> 31);
return x;
n=1000
im=[[hash64(i,j) for i in range(n)] for j in range(n)]
pl.subplot(121)
pl.imshow(im)
pl.colorbar()
pl.subplot(122)
pl.hist(np.array(im).ravel(),bins=100)
pl.show()
这个 numba hash64
函数在大约 200 ns 内计算出哈希码。
这个图(即使它什么也没展示)表明这个函数可能是一个很好的候选者。
相比之下,python 哈希函数(hash((i,j)) on tuple
)没有通过测试:
这里是 Knuth 生成器:
还有一些基准:
In [61]: %timeit hash64(0,1)
215 ns ± 9.11 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [62]: %timeit np.random.seed(0+1<<30);a=np.random.randint(2**30)
4.18 µs ± 126 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [63]:%timeit hash((0,1))
102 ns ± 19.5 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
关于python - "Deterministic"伪随机数生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47678568/
我对确定性函数的理解是: always produces the same result for the same input parameters 根据我的理解,下面的函数是非确定性函数 CREAT
根据 Deterministic and Nondeterministic Functions 上的 MSDN SQL BOL(联机丛书)页面,非确定性函数可以“以确定性方式使用” The follo
我今天刚刚开始阅读更多关于马尔可夫链生成器的内容,并且对构建它的整个过程非常感兴趣。根据我的理解, future 状态取决于过去状态到现在的统计数据。 示例: Hello World. Hello D
有人能给我一个程序中确定性错误的例子吗? 谢谢。 最佳答案 void bug() { int *ptr = 0; ptr[0] = 10; } 访问空指针。总是发生。 关于determinis
它们(幂等函数和确定性函数)是否只是在给定相同输入的情况下返回相同结果的函数? 还是我遗漏了什么区别? (如果有区别,请你帮我理解它是什么) 最佳答案 用更简单的话来说: 纯确定性函数 :输出完全且仅
我处于一种情况,我需要生成一个非常大的(~10^16 个元素)具有特定随机稀疏模式的随机矩阵。显然存储所有这些元素是完全不可行的。在任何给定时间只需要少数元素,因此可以按需绘制它们 - 但是,一旦存储
让我们仔细看看Ticker example code在 Go 的时间包中: package main import ( "fmt" "time" ) func main() {
某些 Prolog 目标的确定性成功问题已经一次又一次地出现在 - 至少 - 以下问题: Reification of term equality/inequality Intersection an
我正在构建一个 Bitbake 配方并收到以下错误消息: ERROR: When reparsing virtual:native:/path/to/poky/meta/recipes-devtool
我在使用 Symfony2 时遇到了这个奇怪的错误。在本地主机中,一切正常,但是当我在服务器中尝试时,我收到此 PHP 错误: [06-Mar-2013 22:04:50 UTC] PHP Fatal
我正在使用 Scipy.stats.multivariate_normal从多元正态分布中抽取样本。像这样: from scipy.stats import multivariate_normal #
我正在开发一个 Groovy 应用程序,它必须为用户提供一个包含加密查询参数的链接。目前我们使用 AES 加密算法,所有链接都使用相同的 IV。我们知道这很糟糕(因此我们想要切换的原因),但这样做的原
在 DB2 V5R4 中,当您修改 DETERMINISTIC UDF 的功能时,它会返回缓存的响应一段时间... 有什么方法可以重置缓存的响应? 提前致谢。 最佳答案 它返回缓存的响应是什么?是通过
我目前正在尝试在 Keras 中实现 DDPG。我知道如何更新评论家网络(普通 DQN 算法),但我目前坚持更新 Actor 网络,它使用等式: 因此,为了将 Actor 网络 wrt 的损失减少到其
在数据访问限制方面,Oracle 函数中的确定性 和并行启用子句有什么区别? 最佳答案 如 documentation on the CREATE FUNCTION statement 中所述: DE
Oracle 函数中的deterministic 和parallel enable 子句 在数据访问限制方面有什么区别? 最佳答案 如 documentation on the CREATE FUNC
我使用 Stanford Core NLP 构建了一个 Java 解析器。我发现在使用 CORENLP 对象获得一致结果时存在问题。我正在为相同的输入文本获取不同的实体类型。对我来说,这似乎是 Cor
TL;DR:我非常希望 in_edges 的迭代顺序在我的图表上(adjacency_list 和 edge_list of setS)是确定性的,但据我所知,迭代的顺序是由只是指针的比较运算符确定比
我是 Rust 的新手,正在尝试了解 Cargo 的东西。我在他们的常见问题解答中读到关于 "why do binaries have Cargo.lock in version control, b
假设我有一个观点 MYVIEW COL1[CARCHAR2] SORTINGCOL[NUMBER] "itm1" 100 "itm2" 101 "it
我是一名优秀的程序员,十分优秀!