我找不到Python中的内置函数来生成一个给定最小值和最大值的日志均匀分布(R等价于此处),如:loguni [n,exp(min),exp(max),base]返回n log,均匀分布在exp(min)和exp(max)范围内.
我发现的最接近的是numpy.random.uniform.
假设我想在 [10^-20, 0.1] 范围内绘制一个随机数,我该怎么做?
如果我使用 numpy.random.uniform,我似乎不会低于 10^-2:
In [2]: np.random.uniform(0.1, 10**(-20))
Out[2]: 0.02506361878539856
In [3]: np.random.uniform(0.1, 10**(-20))
Out[3]: 0.04035553250149768
In [4]: np.random.uniform(0.1, 10**(-20))
Out[4]: 0.09801074888377342
In [5]: np.random.uniform(0.1, 10**(-20))
Out[5]: 0.09778150831277296
In [6]: np.random.uniform(0.1, 10**(-20))
Out[6]: 0.08486347093110456
In [7]: np.random.uniform(0.1, 10**(-20))
Out[7]: 0.04206753781952958
Run Code Online (Sandbox Code Playgroud)
或者,我可以生成一个数组,例如:
In [44]: fac = np.linspace(10**(-20),10**(-1),100)
In [45]: fac
Out[45]:
array([ 1.00000000e-20, 1.01010101e-03, 2.02020202e-03,
3.03030303e-03, 4.04040404e-03, 5.05050505e-03,
6.06060606e-03, 7.07070707e-03, 8.08080808e-03,
9.09090909e-03, 1.01010101e-02, 1.11111111e-02,
1.21212121e-02, 1.31313131e-02, 1.41414141e-02,
1.51515152e-02, 1.61616162e-02, 1.71717172e-02,
1.81818182e-02, 1.91919192e-02, 2.02020202e-02,
2.12121212e-02, 2.22222222e-02, 2.32323232e-02,
2.42424242e-02, 2.52525253e-02, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Barabasi-Albert网络中模拟Ising相变,并尝试复制在Ising网格模拟中会观察到的一些可观察到的结果,例如磁化强度和能量。但是,我在解释我的结果时遇到了麻烦:不确定物理学是否错误或实现中是否有错误。这是一个最小的工作示例:
import numpy as np
import networkx as nx
import random
import math
## sim params
# coupling constant
J = 1.0 # ferromagnetic
# temperature range, in units of J/kT
t0 = 1.0
tn = 10.0
nt = 10.
T = np.linspace(t0, tn, nt)
# mc steps
steps = 1000
# generate BA network, 200 nodes with preferential attachment to 3rd node
G = nx.barabasi_albert_graph(200, 3)
# convert csr matrix to adjacency matrix, a_{ij}
adj_matrix = nx.adjacency_matrix(G)
top = …Run Code Online (Sandbox Code Playgroud)