Python 使用Numpy对循环进行矢量化

Python 使用Numpy对循环进行矢量化,python,arrays,numpy,Python,Arrays,Numpy,我有两个1D Numpy数组index\u data和charge,它们的长度相同,分别包含整数和浮点。我正在尝试制作一个总费用数组,如下所示: total_charge = [] for i in range(len(index_data)): if index_data[i] == 0: total_charge.append(charge[i]) else: total_charge[-1] += charge[i] total_charge

我有两个1D Numpy数组
index\u data
charge
,它们的长度相同,分别包含整数和浮点。我正在尝试制作一个
总费用
数组,如下所示:

total_charge = []
for i in range(len(index_data)):
    if index_data[i] == 0:
        total_charge.append(charge[i])
    else:
        total_charge[-1] += charge[i]
total_charge = np.array(total_charge)

我如何将其矢量化?帮帮我,小巫师们,你是我唯一的希望。

一个具体的
索引数据
收费
的例子将有助于澄清预期的输入。然而,从阅读您的资料来看,我认为可以使用
np.add.reduceat

显然,每一组新的费用都由
index_data
中的
0
表示;否则,不使用
index_data
中的值<代码>总费用
是每组费用的总和

下面是一个如何使用
reduceat
的示例

首先,一些演示数据:

In [105]: index_data
Out[105]: array([0, 1, 1, 0, 1, 1, 1, 0, 1])

In [106]: charge
Out[106]: array([ 1.5,  2. ,  3. ,  2.5,  1.5,  1. ,  1. ,  2. ,  1. ])
zerolocs
给出了
index\u数据中出现
0
的索引:

In [107]: zerolocs = where(index_data==0)[0]

In [108]: zerolocs
Out[108]: array([0, 3, 7])
使用
np.add.reduceat
对电荷组求和

In [109]: total_charge = np.add.reduceat(charge, zerolocs)

In [110]: total_charge
Out[110]: array([ 6.5,  6. ,  3. ])

索引数据
费用
的具体示例将有助于澄清预期输入。然而,从阅读您的资料来看,我认为可以使用
np.add.reduceat

显然,每一组新的费用都由
index_data
中的
0
表示;否则,不使用
index_data
中的值<代码>总费用
是每组费用的总和

下面是一个如何使用
reduceat
的示例

首先,一些演示数据:

In [105]: index_data
Out[105]: array([0, 1, 1, 0, 1, 1, 1, 0, 1])

In [106]: charge
Out[106]: array([ 1.5,  2. ,  3. ,  2.5,  1.5,  1. ,  1. ,  2. ,  1. ])
zerolocs
给出了
index\u数据中出现
0
的索引:

In [107]: zerolocs = where(index_data==0)[0]

In [108]: zerolocs
Out[108]: array([0, 3, 7])
使用
np.add.reduceat
对电荷组求和

In [109]: total_charge = np.add.reduceat(charge, zerolocs)

In [110]: total_charge
Out[110]: array([ 6.5,  6. ,  3. ])

我不认为这很容易实现矢量化…斯波克先生的《星球大战》参考资料?不,那是不对的我不认为这很容易实现矢量化…斯波克先生的《星球大战》参考资料?不,那是不对的你是一个奇迹工作者。我知道有一些模糊的Numpy函数可以完全满足我的要求,我只是不知道是哪一个。嘿,我们这些徒步旅行者仍然可以欣赏《星球大战》。你是一个奇迹工作者。我知道有一些模糊的Numpy函数可以完全满足我的要求,我只是不知道是哪一个。嘿,我们这些徒步旅行者仍然可以欣赏《星球大战》。