numpy 中多维数组的三角索引

Triangular indices for multidimensional arrays in numpy

我们知道np.triu_indices returns矩阵的三角形上部的索引,一个二维数组。

如果想像下面的代码那样创建索引怎么办?

indices = []
for i in range(0,n):
    for j in range(i+1,n):
        for k in range(j+1,n):
            indices.append([i,j,k])

以 num-pythonic 方式?

一般来说,您可以获得一个索引列表,这些索引遵循您放置的代码的逻辑

from itertools import combinations
ndim = 3 # number of dimensions
n = 5 # dimension's length (assuming equal length in each dimension)

indices = list(combinations(range(n), r=ndim)

或者如果您想遍历每个位置:

for i,j,k in combinations(range(n), r=ndim):
    # Do your cool stuff here
    pass

但是,您将其称为多维矩阵的三角形上部。我不确定它的定义是什么,并且试图用嵌套循环可视化您选择的索引我无法弄清楚......(我现在很好奇是否有多维三角矩阵的定义: -P)

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

a = zip(*indices)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(a[0], a[1], a[2])
plt.xlabel('x')
plt.ylabel('y')
plt.show()

(我移动了视角试图显示选择了哪些位置)