我提出了以下方法来寻找所有共同的指数,其中值在两个长度相等的向量上存在。我喜欢它的可读性,但我需要它更快
missingA = np.argwhere(np.isnan(vectorA)==True);
missingA = [missingA[ma][0] for ma in range(len(missingA))];
missingB = np.argwhere(np.isnan(vectorB)==True);
missingB = [missingB[mb][0] for mb in range(len(missingB))];
allmissidxs = set(missingA).union(set(missingB));
idxs = [idx for idx in range(len(vectorA)) if idx not in allmissidxs];
它肯定能工作,但我需要使用它的向量是从100万到300万个元素…并且可能需要运行多次。我使用“…IfIdx不在allmissidxs中”,而不是说“…IfIdx在allpresidxs中”,因为缺少的值肯定是要扫描的更小的子集。此外,我确信,鉴于np.argwhere()自然返回的结构,必须重新配置missingA和missingB也无济于事,但这真的是这里的瓶颈吗
任何帮助都将不胜感激!谢谢
假设源向量与其他解决方案中的源向量相同:
您可以使用Pandasonic索引及其交叉方法来完成任务。 甚至可以将其写成以下一行:
结果是:
如果希望将结果作为Numpy向量,请将
.values
附加到上述代码中 结果将是:这种方法的优点是避免了任何列表理解, 因此,此代码的运行速度应该比您的代码快得多。 在更大的数据样本上自己检查
相关问题 更多 >
编程相关推荐