在2D数组中交换多个索引

时间:2020-01-27 18:28:42

标签: python numpy

问题

对于以下数组:

import numpy as np

arr = np.array([[i for i in range(10)] for j in range(5)])

# arr example
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

对于arr中的每一行,我试图根据某个2d数组(例如2)交换 n (在这种情况下为2)索引。

swap = np.random.choice(arr.shape[1], [arr.shape[0], 2], replace=False)

# swap example
array([[8, 1],
       [5, 0],
       [7, 2],
       [9, 4],
       [3, 6]])

问题

我尝试了arr[:, swap] = arr[:, swap[:, ::-1]],但这会为每一行执行每次交换,而不是仅逐行交换索引。我尝试实现的行为如下。无需迭代swap就能做到吗?

for idx, s in enumerate(swap):
   arr[idx, s] = arr[idx, s[::-1]]

# new arr with indices swapped
array([[0, 8, 2, 3, 4, 5, 6, 7, 1, 9],
       [5, 1, 2, 3, 4, 0, 6, 7, 8, 9],
       [0, 1, 7, 3, 4, 5, 6, 2, 8, 9],
       [0, 1, 2, 3, 9, 5, 6, 7, 8, 4],
       [0, 1, 2, 6, 4, 5, 3, 7, 8, 9]])

1 个答案:

答案 0 :(得分:3)

您可以使用“帮助器”数组来索引df['index'] = (df['return'].astype(float) .div(100) .add(1) .mask(df['industry'].ne(df['industry'].shift()),100) .groupby(df['industry']) .cumprod()) print(df) date industry return index 0 01/01/2020 energy 0.5 100.0 1 01/02/2020 energy 0.1 100.1 2 01/01/2020 technology 1.2 100.0 3 01/02/2020 technology 0.5 100.5 4 01/01/2020 healthcare 0.1 100.0 5 01/02/2020 healthcare 1.2 101.2 。助手将arr强制转换为正确的形状。

arr
相关问题