scipy.cKDTree.query 的最佳数据结构是什么?

问题描述

我在一台每核 4 个线程的机器上使用 scipy.cKDTree.query(data,n_jobs=4) 和 export OMP_NUM_THREADS=4。我原以为脚本运行时会有 400% 的 cpu 使用率,但是,似乎只有 200% 左右的 cpu 使用率与 numpy 数组一起使用。使用压缩数据可以达到 400%,但只是间歇性的。我想知道 scipy.cKDTree.query 的最佳数据结构是什么?

这是简单的shell脚本(script.sh):

#!/bin/sh
export OMP_NUM_THREADS=4
python -u stackOverflowExample.py > log.python 2>&1 &

这是压缩数据的简单 python 代码 (stackOverflowExample.py)(达到 400% cpu,但只有短暂的 3 次,中间又恢复到 100% cpu):

from scipy import spatial
import numpy as np

x,y,z = np.mgrid[2.111:400,2.222:640,2.543:48]
data = list(zip(x.ravel(),y.ravel(),z.ravel()))

x,z = np.mgrid[1.1:400,1.5:640,1.125:48]
data2 = list(zip(x.ravel(),z.ravel()))

tree = spatial.cKDTree(data)

for i in range(3):

    distance,index = tree.query(data2,n_jobs=4)

我也用 numpy 数组尝试了类似的代码(达到大约 200% cpu 并且基本保持不变):

from scipy import spatial
import numpy as np
import time

x,2.543:48]
data3 = np.array([x.ravel(),z.ravel()])

x,1.125:48]
data4 = np.array([x.ravel(),z.ravel()])
data5=data4[:,:data3.shape[1]]

tree = spatial.cKDTree(data3)

for i in range(50):

    distance,index = tree.query(data5,n_jobs=4)

  • Python 版本:3.6.5
  • Scipy 版本:1.1.0
  • Numpy 版本:1.14.3

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)