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()
(我移动了视角试图显示选择了哪些位置)
我们知道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()