【发布时间】:2016-04-27 21:13:08
【问题描述】:
首先,我将介绍我的目标和实现它的代码
-
VALUE 是一个 3-d numpy 数组,表示 2-d 区域的时间变化。 (例如
value[:1000,2,3] = list[网格(X = 3,Y = 2)的值从0到1000s]。)在我的实际工作中,VALUE 的形状是 (2812, 75, 90) ps:“2812”是 4 个月的总小时数
-
我称为 SELECT 的某个点表示一个有趣的点,我将对该区域中的每个网格进行相关性分析。
SELECT 是一个 pandas 数据框,包括每个有趣点的 X 和 Y
-
COV 是一个 3-d 数组作为计数矩阵,记录每个 SELECT 点与每个网格点的相关程度
设置截止皮尔逊系数 rc = 0.75,
对于 SELECT 点 t,
如果 r(i,j) > rc ==> cov[t,i,j] = 1,否则 cov[t,i,j] = 0
这是我的代码,但有点慢。我认为该过程的某些部分可以改进:
start = timeit.default_timer()
### SELECT is a pandas dataframe including each interesting point's X and Y
cov = np.zeros(len(SELECT)*VALUE.shape[1]*VALUE.shape[2]).reshape(len(SELECT), VALUE.shape[1],VALUE.shape[2])
for t in range(0,len(SELECT),1):
select_grid = pd.DataFrame(VALUE[:,SELECT.Y.iloc[t],SELECT.X.iloc[t]])
for i in range(0,VALUE.shape[1],1):
for j in range(0,VALUE.shape[2],1):
data_grid = pd.DataFrame(VALUE[:,i,j])
## Using corr to compute the correlation r
r_sg = select_grid[0].corr(data_grid[0])
if r_sg > 0.75:
cov[t,i,j] = 1
end = timeit.default_timer()
print end - start
【问题讨论】:
-
您是否尝试过运行分析器来查看时间花在了哪里?例如
line_profiler中描述的this article,只需向下滚动到“逐行......”部分。可能有助于阐明可以改进的地方。 -
你能给出
len(SELECT), VALUE.shape[1], VALUE.shape[2]和end - start的幅度来估计可能的改进吗?ds_grid是什么?数据链接也是一个很好的工具。 -
谢谢!我不知道
timing context manager。如果可以的话,我会学习的。
标签: python numpy pandas scipy correlation