首页 > 解决方案 > 在 numpy 中交换值和索引

问题描述

我想知道这是否可能,所以我有两个二维数组:

X[7][9] = 10
Y[7][9] = 5 

根据以上信息,我想创建以下两个二维数组:

X'[5][10] = 9
Y'[5][10] = 7

有可能做到这一点吗?X 和 Y 的值是有界的,不会超过 X 和 Y 的形状。X 和 Y 的形状也相同。

提前致谢。

标签: numpy

解决方案


您应该能够使用np.nditer来跟踪多索引和数组的相应值。

rng = np.random.RandomState(0)
X = rng.randint(low=0, high=10, size=(10, 10))
Y = rng.randint(low=0, high=10, size=(10, 10))

X_prime = X.copy()
Y_prime = Y.copy()

it = np.nditer([X, Y], flags=['multi_index'])
for x, y in it:
    i, j = it.multi_index
    X_prime[y, x] = j
    Y_prime[y, x] = i

我相信这是您期望的结果:

>>> X[7, 9], Y[7, 9]
(3, 9)
>>> X_prime[9, 3], Y_prime[9, 3]
(9, 7)

>>> X[1, 2], Y[1, 2]
(8, 2)
>>> X_prime[2, 8], Y_prime[2, 8]
(2, 1)

推荐阅读