我希望修改我的 Python 脚本,使其在六边形宇宙中运行(这是一个生物学的基于代理的模型)。以下是我在正方形模型中创建和初始化二维矩阵的方式:基本上,N 是晶格的大小,R 给出了我需要在算法开始时更改值的矩阵部分的半径。
我会尽力为您翻译。这段内容的意思是:我按照一定的规则让矩阵发展,最后通过创建pickle文件来打印输出。
我觉得像这样初始化一个NxNxN矩阵,然后根据坐标的约束条件找到打印子集的方法相当复杂。我正在寻找一种更简单的方法,更重要的是,我想了解如何绘制算法产生的六边形晶格(目前没有任何线索,我还没有尝试过任何东西)。
a = np.zeros(shape=(N,N))
center = N/2
for i in xrange(N):
for j in xrange(N):
if( ( pow((i-center),2) + pow((j-center),2) ) < pow(R,2) ):
a[i,j] = 1
我会尽力为您翻译。这段内容的意思是:我按照一定的规则让矩阵发展,最后通过创建pickle文件来打印输出。
name = "{0}-{1}-{2}-{3}-{4}.pickle".format(R, A1, A2, B1, B2)
pickle.dump(a, open(name,"w"))
现在,我想在一个六边形晶格上做完全相同的操作。我读了this一个有趣的StackOverflow问题,它清楚地说明了如何用三个坐标表示六边形晶格上的位置,但对于我来说仍有一些不清楚的事情,即:
(a) 在Python中应该如何处理这三个轴,考虑到我的需求与三维矩阵不等价,由于坐标的限制,
(b) 如何绘制图形?
至于(a),这是我试图做的:
a = np.zeros(shape=(N,N,N))
for i in xrange(N/2-R, N/2+R+1):
for j in xrange(N/2-R, N/2+R+1):
for k in xrange(N/2-R, N/2+R+1):
if((abs(i)+abs(j)+abs(k))/2 <= 3*N/4+R/2):
a[i,j,k] = 1
我觉得像这样初始化一个NxNxN矩阵,然后根据坐标的约束条件找到打印子集的方法相当复杂。我正在寻找一种更简单的方法,更重要的是,我想了解如何绘制算法产生的六边形晶格(目前没有任何线索,我还没有尝试过任何东西)。