h5id_unique = np.unique(df_[:,0])
cnt_nan = 0
cnt_pos = 0
cnt_neg = 0
cnt = 0
for h5id in h5id_unique:
dfq_ = df_[df_[:,0]==h5id]
if dfq_.shape[0] <=2 or dfq_[:,1].sum() != 1:
cnt_nan += 1
continue
cnt += 1
pos_score = dfq_[dfq_[:,1]==1, 2]
neg_score = dfq_[dfq_[:,1]==0, 2]
for i in neg_score:
if i <= pos_score:
cnt_pos += 1
else:
cnt_neg +=1
if cnt % 500 == 0:
print cnt_pos / float(cnt_neg), cnt_nan, cnt
我有一个名为df\的numpy数组,它有三列
h5id, label, pred
h5id
是字符串格式的id,label
是0/1 int,pred
是浮点。这是我的密码。df有1100万行,而数组中有300万个不同的h5id。
我发现我的代码很慢。我怎样才能改进它?我认为索引操作花费了太多时间。它将索引300万次。
谢谢。你知道吗
在不完全理解代码或其运行的数据的情况下给出一些建议。 您可以尝试根据第一列对
df_
进行排序,然后根据相同的键彼此相邻的事实进行更智能的索引。你知道吗根据数据的不同,下面使用的代码建议了一种更简单的方法
这是过滤掉标识符出现两次或更少的任何行,以及列1和列2之和不等于1的任何行。如果大多数数据不满足这些条件,则根据这些条件过滤数据,然后处理其余的数据会快得多。下面的伪代码给出了一种粗略的过滤方法
然后以与
df_
相同的方式处理newdf
相关问题 更多 >
编程相关推荐