基于Python中的引用数组,在所需位置向numpy数组添加元素

2024-09-28 22:23:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些实验数据,用周期性的时间间隔记录数据。如果测量属性的值为0,则不记录相应的时间戳和属性(0)的值。但是,出于分析目的,我需要在其值为0的相应时间将0添加到度量属性数组中。你知道吗

下面这个简单的例子说明了我的问题

loggedTimes = numpy.array([0,    10,   20,  40,  50, 80, 90, 100])
property    = numpy.array([1500, 2000, 500, 75,  60, 45, 37, 0])

所有可能的记录时间为:

allTimes = numpy.array([0,10,20,30,40,50,60,70,80,90,100]

因此,在时间30、60和70时,财产的价值为0。因此,我需要在属性数组中的相应位置添加一个0,这样的结果是:

allTimes          = numpy.array([0,    10,   20,  30, 40, 50, 60, 70, 80, 90, 100]
propertyCorrected = numpy.array([1500, 2000, 500, 0,  75, 60, 0,  0,  45, 37, 0])

有没有一种不使用循环的聪明方法来做到这一点。这是因为我的实验数据非常大,而且我有多个实验运行,所以循环太慢,特别是当我需要从文本文件重新加载实验数据时。你知道吗

如果有帮助,所有时间和属性值都是整数。你知道吗

谢谢!你知道吗


Tags: 数据目的numpy间隔属性度量记录时间
2条回答

您也可以使用^{}来完成相同的任务。你知道吗

final_vals = np.zeros(allTimes.size)
final_vals[np.in1d(allTimes, loggedTimes)] = property
final_vals
array([ 1500.,  2000.,   500.,     0.,    75.,    60.,     0.,     0.,
      45.,    37.,     0.])

虽然粗略地测试了一下性能,但np.searchsorted的性能似乎要高得多。你知道吗

假设allTimesloggedTimes数组都已排序,则可以从以下内容开始:

propertyCorrected  = np.zeros(allTimes.size)
propertyCorrected [np.searchsorted(allTimes, loggedTimes)] = property
propertyCorrected 
#array([ 1500.,  2000.,   500.,     0.,    75.,    60.,     0.,     0.,
#          45.,    37.,     0.])

相关问题 更多 >