我对非常大的数据集有一些问题。我需要找到一种可靠且快速的方法来查找/替换结构化数组中的条目。我正在寻找一种不循环所有条目的解决方案。我知道 C 有快速的解决方案,但我不知道如何在 python 中解决这个问题。我也想知道是否有为此目的的 numpy 函数!
我正在使用 Python 2.7.13 和 numpy 1.12.1!
任务:通过从中的中心列表中data_centrals
找到孤儿的卤素,将孤儿的
所有位置设置为 的位置。data_orphan
data_centrals
import numpy as np
data = Structured array:
class: ndarray
shape: (189258912,)
dt = [('hostid', '<u8'), ('z_pos', '<f8'), ('x_pos', '<f8'),
('y_pos', '<f8'), ('haloid', '<u8'), ('orphan', 'i1')]
已编辑:可以在 此处下载包含 200 个对象的数据子样本!它的结构由dt给出:第一列 --> hostid,第二列 --> z_pos等。它可以复制/粘贴到 python shell 或脚本中......
您可以在下面找到设置位置的代码。
问题:是否有聪明的方法来搜索卤化物并设置位置而不循环所有条目data_orphan
?
data_centrals=data[np.where(data['haloid']==data['hostid'])] # (111958237,)
data_orphans=data[np.where(data['orphan']==2)] # (61870681,)
a=0
while a<len(data_orphans):
#check where in data_centrals the haloid of the orphan can be found
position=np.where(data_centrals['haloid']==data_orphans['haloid'][a])
#find the position of data_orphan['haloid'][a] in data
position_data=np.where(data['hostid']==data_orphans['hostid'][a])
#set the positions
data['x_pos'][int(position_data[0])]=data_centrals['x_pos'][int(position[0])]
data['y_pos'][int(position_data[0])]=data_centrals['y_pos'][int(position[0])]
data['z_pos'][int(position_data[0])]=data_centrals['z_pos'][int(position[0])]
a+=1