给定一堆任意向量(存储在矩阵A中)和半径r,我想找到落在半径r球内的那些向量的所有整数值线性组合.然后我将存储在矩阵V中的必要坐标.例如,如果是线性组合
K=[0; 1; 0]
Run Code Online (Sandbox Code Playgroud)
在我的球体内部,即类似的东西
if norm(A*K) <= r then
V(:,1)=K
end
Run Code Online (Sandbox Code Playgroud)
等等
A中的向量肯定是给定晶格的最简单可能的基础,最大的向量将具有长度1.不确定是否以任何有用的方式限制向量但我怀疑它可能. - 他们不会像不太理想的基础那样有相似的指示.
我已经尝试了一些方法,但没有一个看起来特别令人满意.我似乎无法找到一个漂亮的模式来穿越晶格.
我目前的方法涉及从中间开始(即所有0的线性组合)并逐个经过必要的坐标.它涉及存储一堆额外的矢量来跟踪,所以我可以遍历坐标的所有八分圆(在3D情况下)并逐个找到它们.这个实现看起来非常复杂并且不够灵活(特别是它似乎不容易推广到任意数量的维度 - 虽然这对于当前目的来说并不是绝对必要的,但它是一个很好的选择)
有没有一个很好的方法来找到所有必需的点?
(*理想情况下既高效又优雅**.如果真的有必要的话,在球体之外有一些额外的点数并不重要,但最好不要那么多.我绝对需要球体内的所有向量. - 如果它有很大的不同,我对3D案例最感兴趣.
**我很确定我当前的实现都不是.)
我发现类似的问题:
找到围绕任意坐标的半径为r的球体中的所有点 - 这实际上是比我正在寻找的更普遍的情况.我只处理周期性格子,我的球体总是以0为中心,与格子上的一个点重合.但我没有一个点列表,而是一个矢量矩阵,我可以用它来生成所有点.
如何有效地枚举n维网格中的所有球体点 - 完全规则的超立方格子和曼哈顿距离的情况.我正在寻找完全任意的格子和欧氏距离(或者,为了效率目的,显然是正方形).
我在列表中有一堆列表.嵌套深度在运行时确定,我只想访问它们到特定的(运行时决定的)深度,以任意方式操纵该级别的内容.
理想情况下,我希望能够像下面这样做:
for x in access_list(nested_list, d)
# do stuff at nesting-depth d
Run Code Online (Sandbox Code Playgroud)
该怎么access_list做:
>>> mylist = [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
>>> for d in range(4):
... for l in access_list(mylist, d):
... print((d, l))
(0, [[[0, 1], [2, 3]], [[4, 5], [6, 7]]])
(1, [[[0, 1], [2, 3]])
(1, [[4, 5], [6, 7]]])
(2, [0, 1])
(2, [2, 3])
(2, [4, 5])
(2, [6, 7])
(3, 0)
(3, 1)
(3, 2)
(3, 3) …Run Code Online (Sandbox Code Playgroud)