从一个n维数组索引 - numpy/ python

2024-06-26 02:16:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理(x,y,z)维的矩阵,并希望同时从这个矩阵中索引许多值

ie. if the index A[0,0,0] = 5

and A[1,1,1] = 10

A[[1,1,1], [5,5,5]] = [5, 10]

然而,像这样的索引似乎返回了矩阵的大块

有人知道我怎么做吗?我有一个大的索引数组(n,x,y,z),我需要用它来索引a)

谢谢


Tags: andtheindexif矩阵数组ie大块
2条回答

您尝试使用1作为第一个索引3次,5作为第二个维度的索引(同样是3次)。这将使元素在A[1,5,:]处重复三次

A = np.random.rand(6,6,6);
B = A[[1,1,1], [5,5,5]]
# [[ 0.17135991,  0.80554887,  0.38614418,  0.55439258,  0.66504806,  0.33300839],
#  [ 0.17135991,  0.80554887,  0.38614418,  0.55439258,  0.66504806,  0.33300839],
#  [ 0.17135991,  0.80554887,  0.38614418,  0.55439258,  0.66504806,  0.33300839]]

B.shape
# (3, 6)

相反,您需要为矩阵的每个轴指定[1,5]

A[[1,5], [1,5], [1,5]] = [5, 10]

高级索引的工作原理如下:

A[I, J, K][n] == A[I[n], J[n], K[n]]

使用AIJK所有数组。这不是完整的,一般的规则,但它的规则简化为什么你需要

例如,如果您想要output[0] == A[0, 0, 0]output[1] == A[1, 1, 1],那么您的IJK数组应该看起来像np.array([0, 1])。列表也起作用:

A[[0, 1], [0, 1], [0, 1]]

相关问题 更多 >