如何使用 numpy 数组有效地执行多个元素交换?

How to effeciently perform multiple element swaps with a numpy array?

在一个包含 48 个元素的 numpy 数组中,我需要进行一系列交换。

34 -> 21 -> 42 -> 26 -> 34
36 -> 19 -> 44 -> 28 -> 36
39 -> 16 -> 47 -> 31 -> 39

其中 x -> y 表示索引 x 处的元素必须转到第 y 个索引。我正在尝试想出一种有效的方法来做到这一点,因为数字是随机的,这只是我需要进行的一系列交换之一。

例如: 给定以下数组

original = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

我要进行以下交换

1 -> 4 -> 6 -> 1

所以我最终得到

swapped = ['a', 'g', 'c', 'd', 'b', 'f', 'e', 'h']

所以第一个索引元素到第四个索引,第四个到第六个,第六个到第一个。

也许是这样的。

def swap(input, index):
    start_index = index[0]
    for next_index in range(1, len(index)):
       input[start_index], input[next_index] = input[next_index] , input[start_index]
    
    return(input)

if __name__ == '__main__':
    input = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
    index = [2,3,6,2]

    output = swap(input, index)
    print(output)

这可能是执行其中一个序列的最有效方法:

swaps = [34, 21, 42, 26, 34]
arr = np.arange(48)

from_idx = lst[:-1]
to_idx = lst[1:]
arr[to_idx] = arr[from_idx]