如何矢量化此 python for 循环?

How can I vectorize this python for loop?

我正在尝试计算具有各种阈值的事件数。所以我用for循环将其用作阈值但是事件数量太多所以需要太多时间。 所以我想矢量化这个宏并减少计算时间。我能得到一些帮助吗?

array_ = np.array(bin_number)

for i in range(bin_number):
    mask_1 = array_ML[:,0] > i
    masked_array = array_ML[mask_1]

    mask_2 = masked_array[:,2] == 0
    masked_array = masked_array[mask_2]

    array_[i] = masked_array.shape[0]

NumPy 中可能有一个专门的函数可以为您执行此操作,但除此之外,以下简化可能会显着加快您的代码速度:

import numpy as np

# Create example data
array_ML = np.random.randint(0, 1000, (10000, 200))
array_ML[:, 2] = np.where(array_ML[:, 2] > 500, 0, 1)

bin_number = 100
array_ = np.zeros(bin_number, dtype=int)

# filter what we can, before the loop
mask = array_ML[:, 2] == 0
temp = array_ML[mask, 0]
# Just count, by summing the condition
for i in range(bin_number):
    array_[i] = np.sum(temp > i)

使用上面的示例数据,我的时间(在 Jupyter 笔记本单元中使用 %%time)从 439 毫秒(原始代码)减少到 3.86 毫秒(上面的代码)。

当然,时间减少在很大程度上取决于您的输入数据形状、数据分布和bin_number;我的时间可以作为参考。