python – 从整数创建一个包装最近邻居列表的球体
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 从整数创建一个包装最近邻居列表的球体,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2612字,纯文字阅读大概需要4分钟。
内容图文
![python – 从整数创建一个包装最近邻居列表的球体](/upload/InfoBanner/zyjiaocheng/784/a438394979954f5f8fc4992d680a9215.jpg)
我正在尝试在python中构造一个最近邻居列表,该列表存储有限三维六边形最密堆积(HCP)点阵中节点的最近邻居.我已经完成了这个已经用2d方格子定义了这样的结构.我不想要坐标,只是一种快速的方法来为整数列表中的HCP创建最近邻居列表.下面是我用正方形格子完成此任务的示例代码.
N = int #number of nodes
L = side # a 32x32 graph, L would be 32
for i in range(N):
nearNeighbor[i][0] = (i + 1 ) % N
nearNeighbor[i][1] = (i + (N - 1)) % N
nearNeighbor[i][2] = (i + L) % N
nearNeighbor[i][3] = (i + N - L) % N
if (i-L < 0):
nearNeighbor[i][3] = -2
if (i+L >= N):
nearNeighbor[i][2] = -2
if (i%L) == 0:
nearNeighbor[i][1] = -2
if ((i+1)%L) == 0:
nearN[eighbori][0] = -2
而已.现在,HCP晶格在可视化时类似于紧密堆积在一起的巨大球体立方体.每个节点最多应该有12个最近的邻居,它们应该出来制作类似立方体的东西.我想在很大程度上我想知道如何使用整数和模运算来表示HCP晶格,就像我用方格一样.你能帮我堆叠吗?
解决方法:
这个问题的答案取决于人们如何选择截断HCP晶格并对其进行索引.一个选择是
通过此选择,以下代码将返回给定站点的邻居列表.
def neighbors(i, W, H, D):
A = W * H
plane = i / A
plane_index = i % A
row = plane_index / W
col = plane_index % W
r = -1 if row % 2 else 1 # (-1)**row
p = -1 if plane % 2 else 1 # (-1)**plane
nbors = []
# first include neighbors in same plane
if col != W-1: nbors.append(i+1)
if col != 0: nbors.append(i-1)
if row != H-1: nbors.append(i+W)
if row != 0: nbors.append(i-W)
if (col != 0 or r > 0) and (col != W-1 or r < 0):
if row != H-1: nbors.append(i+W+r)
if row != 0: nbors.append(i-W+r)
# now add neighbors from other planes
if plane != D-1: nbors.append(i+A)
if plane != 0: nbors.append(i-A)
if (col != 0 or p < 0) and (col != W-1 or p > 0):
if plane != D-1: nbors.append(i+A-p)
if plane != 0: nbors.append(i-A-p)
if ((col != W - 1 or p > 0 or r < 0) and
(col != 0 or p < 0 or r > 0) and
(row != H-1 or p < 0) and
(row != 0 or p > 0)):
if plane != D-1:
nbors.append(i + A + p*W + (r-p)/2) #10
if plane != 0:
nbors.append(i - A + p*W + (r-p)/2) #11
return nbors
为了确保我的逻辑正确,我在编写上述函数时使用了以下测试
def test_neighbors():
n = lambda i: set(neighbors(i, 5, 5, 5))
# test bottom layer
assert n(0) == set([1,5,6,25,30])
assert n(2) == set([1,3,7,8,26,27,32])
assert n(4) == set([3,9,28,29,34])
assert n(5) == set([0,6,10,30])
assert n(9) == set([3,4,8,13,14,33,34,38])
assert n(20) == set([15,16,21,45])
assert n(21) == set([16,17,20,22,45,46])
assert n(24) == set([19,23,48,49])
# test second layer
assert n(25) == set([0,1,26,30,31,50,51])
assert n(34) == set([4,9,28,29,33,38,39,54,59])
assert n(36) == set([7,11,12,31,32,35,37,41,42,57,61,62])
assert n(49) == set([24,44,48,74])
请注意,测试并未涵盖所有独特类型的网站,因此,某些地方可能仍存在错误的角落情况.
内容总结
以上是互联网集市为您收集整理的python – 从整数创建一个包装最近邻居列表的球体全部内容,希望文章能够帮你解决python – 从整数创建一个包装最近邻居列表的球体所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。