使用numpy的解决方案,可以轻松地进行整组操作。
首先,我选择用一个原点和三个向量表示一个立方体:单位立方体用orig=np.array([0,0,0])
和表示vects=np.array([[1,0,0],[0,1,0],[0,0,1]])
。
现在是一个numpy函数来生成八个顶点:
import numpy as np
def cube(origin,edges):
for e in edges:
origin = np.vstack((origin,origin+e))
return origin
cube(orig,vects)
array([[0, 0, 0],
[1, 0, 0],
[0, 1, 0],
[1, 1, 0],
[0, 0, 1],
[1, 0, 1],
[0, 1, 1],
[1, 1, 1]])
然后另一个人跨3D跨迷你立方体:
def split(origin,edges,k):
minicube=cube(origin,edges/k)
for e in edges/k:
minicube =np.vstack([minicube + i*e for i in range(k) ])
return minicube.reshape(k**3,8,3)
split (orig,vects,2)
array([[[ 0. , 0. , 0. ],
[ 0.5, 0. , 0. ],
[ 0. , 0.5, 0. ],
[ 0.5, 0.5, 0. ],
[ 0. , 0. , 0.5],
[ 0.5, 0. , 0.5],
[ 0. , 0.5, 0.5],
[ 0.5, 0.5, 0.5]],
...
[[ 0.5, 0.5, 0.5],
[ 1. , 0.5, 0.5],
[ 0.5, 1. , 0.5],
[ 1. , 1. , 0.5],
[ 0.5, 0.5, 1. ],
[ 1. , 0.5, 1. ],
[ 0.5, 1. , 1. ],
[ 1. , 1. , 1. ]]])
当我运行您的解决方案时,我只有8个条目。我认为您的算法仅将对角线值从orig返回到vect。
非常感谢你!!!还有1件事,您能向我解释为什么只有在对它执行np.array并且没有它就不能放入值时,它才起作用吗?
麻木了。A + B就像是向量与数组的总和。与列表,这是串联。