【发布时间】:2017-06-03 06:00:45
【问题描述】:
我有一个代码用于计算数据的成对距离和残差(X、Y、Z)。数据非常大(平均 7000 行),所以我的兴趣是代码效率。我的初始代码是
import tkinter as tk
from tkinter import filedialog
import pandas as pd
import, numpy as np
from scipy.spatial.distance import pdist, squareform
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename()
data = pd.read_excel(file_path)
data = np.array(data, dtype=np.float)
npoints, cols = data.shape
pwdistance = np.zeros((npoints, npoints))
pwresidual = np.zeros((npoints, npoints))
for i in range(npoints):
for j in range(npoints):
pwdistance[i][j] = np.sqrt((data[:,0][i]-data[:,0][j])**2 + (data[:,1][i]-data[:,1][j])**2)
pwresidual[i][j] = (data[:,2][i]-data[:,2][j])**2
使用pwdistance,我将其更改为以下,效果非常好。
pwdistance = squareform(pdist(data[:,:2]))
有没有一种 Python 的方式来计算我的 pwresidual,所以我不需要使用循环来让我的代码运行得更快?
【问题讨论】:
-
你可以用
np.hypot代替np.sqrt和**2 -
@FranciscoCouzo 似乎 OP 要求获取/优化
pwresidual。我第一次也弄糊涂了:) -
@Divakar 这就是我发表评论而不是回答的原因:)
标签: python performance python-3.x numpy