Python 使用Numpy对循环进行矢量化
我有两个1D 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
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函数可以完全满足我的要求,我只是不知道是哪一个。嘿,我们这些徒步旅行者仍然可以欣赏《星球大战》。