- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
更具体地说,numpy:
In [24]: a=np.random.RandomState(4)
In [25]: a.rand()
Out[25]: 0.9670298390136767
In [26]: a.get_state()
Out[26]:
('MT19937',
array([1248735455, ..., 1532921051], dtype=uint32),
2,0,0.0)
Octave :
octave:17> rand('state',4)
octave:18> rand()
ans = 0.23605
octave:19> rand('seed',4)
octave:20> rand()
ans = 0.12852
Octave 声称执行相同的算法(Mersenne Twister,周期为 2^{19937-1})
有人知道为什么不一样吗?
最佳答案
不幸的是,Octave 中的 MT19937 生成器不允许您像 np.random.RandomState(4)
那样使用单个 32 位整数对其进行初始化。如果您使用 rand("seed",4)
这实际上会切换到以前在 Octave 中使用的 PRNG 的早期版本,该 PRNG 根本不是 MT19937,而是 Fortran RANDLIB
.
在 NumPy 和 Octave 中可以得到相同的数字,但您必须破解 Octave 中的随机种子生成算法并编写您自己的函数以从初始 32 位整数种子构造状态向量。我不是 Octave 大师,但通过在 Octave/Matlab 中对位操作函数和整数类进行多次 Internet 搜索,我能够编写以下粗略的脚本来实现播种:
function state = mtstate(seed)
state = uint32(zeros(625,1));
state(1) = uint32(seed);
for i=1:623,
tmp = uint64(1812433253)*uint64(bitxor(state(i),bitshift(state(i),-30)))+i;
state(i+1) = uint32(bitand(tmp,uint64(intmax('uint32'))));
end
state(625) = 1;
像这样使用它:
octave:9> rand('state',mtstate(4));
octave:10> rand(1,5)
ans =
0.96703 0.54723 0.97268 0.71482 0.69773
仅用于与 NumPy 的比较:
>>> a = numpy.random.RandomState(4)
>>> a.rand(5)
array([ 0.96702984, 0.54723225, 0.97268436, 0.71481599, 0.69772882])
数字(或至少前五个数字)匹配。
请注意,random
模块提供的 Python 默认随机数生成器也是 MT19937,但它使用不同的种子算法,因此 random.seed(4)
产生一个完全不同的状态向量,因此 PRN 序列也不同。
关于python vs Octave 随机生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13735096/
假设我们在 Octave 中运行以下命令集: pkg load symbolic %loads the symbolic math package syms x y %declare x and y
Octave中vec的逆运算是什么? 例如。如果我需要将12x1向量转换成3x4矩阵,该怎么办? 最佳答案 我不知道Octave,但我认为您正在寻找 reshape 。 — Built-in Func
我试图在向量中找到一个字符串。 例如:query = "ab"in vector = ["ab", "cd", "abc", "cab"] 问题是:当我使用函数 strfind(vector,quer
对于练习,我必须以 Octave 为单位创建函数 x^i 从 i=1 到 i=10 的动画图。绘图必须有一个动态的标题,曲线的颜色必须改变。目前我的代码如下: function exercicequa
有没有一种方法可以让 Octave 矩阵将字符串和数字放在一起? 我想要一个休闲类型的矩阵: A=["A","B","C","D";1,2,3,4;2,3,4,5;3,4,5,6;4,5,6,7];
事实上,我已经为此奋斗了大约两个月。是什么让这些有所不同? hypotheses= X * theta temp=(hypotheses-y)' temp=X(:,1) * temp temp=tem
我想在我的绘图中添加带有注释的文本或图例框。 目前我的图例绘制在东北外,我想将新的图例(或文本框)添加到东南外的位置。 谢谢! 最佳答案 缺乏有关您的案例的更多信息: 据我所知,一个坐标区对象只能有一
我想在我的绘图中添加带有注释的文本或图例框。 目前我的图例绘制在东北外,我想将新的图例(或文本框)添加到东南外的位置。 谢谢! 最佳答案 缺乏有关您的案例的更多信息: 据我所知,一个坐标区对象只能有一
我想在 Octave 中执行整数除法(我使用的是最新版本 5.1.0)。我厌倦了 idivide(5, 2, "round") 应该产生 3。 Documentation表示将 idivide 与 r
我正在尝试从矩阵中按行获取最大索引。为此,我正在做: [throwaway, indexes] = max(blah, [], 2); 变量“throwaway”会存储我不再需要且永远不会使用的值,我
我在启动 Octave 后收到以下警告。我使用了来自 here 的安装说明. 可能是什么问题?这些是主要警告吗?我正在使用 Windows。 warning: gmsh does not seem t
我一直在学习机器学习类(class),目前学习分类。我实现了分类算法并获得了参数和成本。该作业已经具有绘制决策边界的功能并且可以正常工作,但我试图阅读他们的代码但无法理解这些行。 plot_x = [
我正在尝试更改 octave 中的polar 图中标记的外观。 r = rand(1,10); % the radius t = 30*rand(1,10); % the angles polar(t
我正在尝试从 Octave 中的文件读取矩阵,但我找不到解决方案。 输入文件是: 4 1 4 2 3 1 4 2 1 4 2 1 4 1 2 1 3 其中 4 是行数和列数。我希望能够将该信息存储在矩
我正在运行 Octave 3.4.0 并想创建一个透明的曲面图。但是,我在处理 facealpha 时无法这样做。 , edgealpha , alphadata和 alphadatamapping
安装一个包后,查找该包中有哪些功能的命令是什么? 例如,我有 control安装包。但是如何找到关于这个包的帮助,比如它包含哪些函数等等,就像使用 Matlab 一样? 是否必须去http://oct
我正在尝试在 Octave 音程终端中打印一长串数字。 disp(vec); 我得到的 7.0931e-01 6.2041e-05 9.7740e-01 9.9989e-01 8.8428e-01 9
我试图在OS X上安装Octave。执行brew install octave时,出现以下错误: octave: A LaTeX distribution is required to install
有人知道如何在 Octave 中增加图例字体大小吗? 最佳答案 这对我有用(kubuntu 9.04, Octave 3.2.2) print("plot.eps","-deps", "-F:30")
我试图弄清楚如何增加命令窗口文本。 我想出了legend: legend('{\fontsize{10} Low }', '{\fontsize{10} Medium }', '{\fontsize{
我是一名优秀的程序员,十分优秀!