当维数 n
任意时,是否可以顺序索引 numpy 数组中的点?
n=4
时所需行为的示例:
>>> A = np.mgrid[[slice(0,11,1)]*4]
>>> A[XXX_0] # The "first" point in A
array([0,0,0,0])
>>> A[XXX_1] # The "second" point in A
array([0,0,0,1])
>>> A[XXX_11]
array([0,0,1,0])
>>> A[XXX_14640] # The "last" point in A
array([10,10,10,10])
应该用什么替换上面的 XXX
才能得到上面的输出?
我不想将 A
转换为 2D 数组(例如,使用 A = A.T.reshape(-1,n)
),因为这会删除网格结构(由 mgrid
生成)对于我的应用程序来说是必需的。
最佳答案
您可以使用 A = A.T.reshape(-1,n)
的以下变体:
B = A.reshape(n, -1).T
A
不会被覆盖,并且其网格结构仍然保留。- 不复制任何数据 -
B
是A
的 View (仅有效,因为我们在.T
之前 reshape )
现在您可以使用 A
访问网格结构中的数据,使用 B
访问平面结构中的相同数据。
示例:
A = np.mgrid[[slice(0,11,1)]*4]
B = A.reshape(4, -1).T
# modify first point
print(B[0]) # [0 0 0 0]
B[0] = [1, 3, 3, 7]
print(A[:, 0, 0, 0, 0]) # [1 3 3 7]
关于python - Numpy 数组 任意维度的顺序索引数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48405005/