如何将指定的Mathematica代码转换为对应的Python代码?
Mathematica 随机游走+盒计数分形维计算的Python等效实现
你提供的Mathematica代码实现了二维随机游走生成+盒计数法求分形维度的功能,对应Python实现如下:
依赖安装
需要用到三个常用科学计算库,安装命令:pip install numpy matplotlib scipy
完整实现代码
import numpy as np import matplotlib.pyplot as plt from scipy.stats import linregress # 1. 生成二维随机游走,和原Mathematica逻辑完全对齐 n = 1000 steps = np.random.choice([-1, 1], size=(n, 2)) walk = np.cumsum(steps, axis=0) # 2. 绘制随机游走路径 plt.figure(figsize=(8, 8)) plt.plot(walk[:, 0], walk[:, 1], linewidth=1) plt.gca().set_aspect('equal', adjustable='box') plt.title('二维随机游走路径') plt.show() # 3. 盒计数函数,和原Mathematica的BoxCount实现逻辑一致 def box_count(points, box_size): normalized_coords = np.floor(points / box_size) return len(np.unique(normalized_coords, axis=0)) # 4. 计算不同盒尺寸下的盒数量,做线性回归求分形维 sizes = 2 ** np.arange(0, 11) counts = np.array([box_count(walk, s) for s in sizes]) x = np.log10(1 / sizes) y = np.log10(counts) fit_res = linregress(x, y) print(f"拟合得到的分形维度:{fit_res.slope:.3f}") print(f"拟合R²:{fit_res.rvalue**2:.3f}")
实现说明
- 随机游走生成逻辑和原代码完全一致:每一步x、y方向独立取±1,累加得到路径坐标
- 盒计数逻辑和原代码完全一致:将坐标按盒大小缩放后向下取整,统计不重复的盒坐标数量
- 线性拟合结果和原Mathematica的
LinearModelFit输出完全对齐,拟合直线的斜率即为所求的分形维度
内容的提问来源于stack exchange,提问作者user17511022
相关产品推荐
相关产品推荐

