使用 numpy 的数组广播转换一个简单的 for 循环

Convert a simple for loop using numpy's array broadcasting

我有两个数组,其形状与下面代码块中给出的数组相似。我需要在 for 循环中广播操作以提高我的代码的性能(此操作执行了数百万次)

我知道它看起来很简单,但我已经尝试了最后 30 分钟,但我找不到解决方案。

import numpy as np

# Input arrays
N1, N2, N3 = 500, 2, 1700
aa = np.random.uniform(0., 1., (N1, N2, N3))
bb = np.random.randint(0, N1, N3)

# Block that needs to be broadcasted to improve the performance
arr = []
for i, x in enumerate(aa.T):
    arr.append(x[:, bb[i]])

# Final array
arr = np.array(arr).T
aa[bb,:,np.arange(aa.shape[2])].T