最近我一直在遵循前面一个问题here的一些方法。你知道吗
我已经创建了一个脚本来使用它,并添加了一些可视化来帮助显示我遇到的问题。你知道吗
#Python 2.7, import future division
from __future__ import division
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
#Set length of sides and number of divisions of each side
latva = 6
latvb = 6
latvc = 6
latdiv = 20
#Step of each iteration per side
latvadiv = latva / latdiv
latvbdiv = latvb / latdiv
latvcdiv = latvc / latdiv
#Init array of zeroes
lol = np.zeros((latdiv**3,4),dtype=np.float64)
#Change zero array to number array,
lol[:,:3] = np.arange(latdiv**3)[:,None]//(latdiv**2,latdiv,1)*(latvadiv,latvbdiv,latvcdiv)%(latva,latvb,latvc)
#Mark lattice sides
for item in lol:
if (item[0] < latvadiv/2 ) and (item[1] < latvbdiv/2):
item[3] = 99
elif (item[0] < latvadiv/2) and (item[2] < latvcdiv/2):
item[3] = 99
elif (item[1] < latvbdiv/2) and (item[2] < latvcdiv/2):
item[3] = 99
#Remove anything that is not a lattice side
lol = lol[~(lol[:,3] < 99)]
#Graph display
x = lol[:,[0]]
y = lol[:,[1]]
z = lol[:,[2]]
v = lol[:,[3]]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, zdir='z', s=20, c=v, depthshade=True)
plt.show()
现在,如果运行这个程序,你会得到一个非常小的三维图形,它精确地显示了它应该显示的内容:3条线,每条线有20个点。你知道吗
现在,换衣服
latva = 6
latvb = 6
latvc = 6
至
latva = 3.007164
latvb = 3.007164
latvc = 3.007164
观察图形是如何被破坏的,理论上(在我的理解中——这很可能是错误的)图形上的点应该间隔得更近。3.007164个单位内得20分,而不是6个单位内得20分。你知道吗
现在在“将零数组更改为数字数组”部分,如果您将最后一部分mod部分替换为:
(round(latva,5),round(latvb,5),round(latvc,5))
你又得到了一个正确的图表。如果你把它改成四舍五入而不是五舍五入,你会再次得到一个混乱的图表,这让我相信整个问题源于mod广播操作期间的四舍五入问题。有人知道问题到底是什么,以及如何避免吗?你知道吗
这似乎是一个与国防部的运作问题。你知道吗
我通过加上:
就在非零数组创建之前。你知道吗
相关问题 更多 >
编程相关推荐