【发布时间】:2022-02-04 14:21:48
【问题描述】:
我在 RStudio 中运行了以下代码:
exo <- read.csv('exoplanets.csv',TRUE,",")
df <- data.frame(exo)
ranks <- 570
files <- 3198
datas <- vector()
for ( w in 2:files ) {
listas <-vector()
for ( i in 1:ranks) {
name <- as.character(df[i,w])
listas <- append (listas, name)
}
datas <- append (datas, listas)
}
它读取一个巨大的 NASA CSV 文件,将其转换为数据帧, 将每个元素转换为字符串,并将它们添加到向量中。
RStudio 耗时 4 分 15 秒。
所以我决定在 Julia 中实现相同的代码。 我在 VS Code 中运行了以下代码:
using CSV, DataFrames
df = CSV.read("exoplanets.csv", DataFrame)
fil, col = 570, 3198
arr = []
for i in 2:fil
for j in 1:col
push!(arr, string(df[i, j]))
end
end
结果很好。 Julia 代码只用了 1 分 25 秒!
然后出于纯粹的好奇心,我实现了相同的代码 这次在 Python 中进行比较。 我在 VS Code 中运行了以下代码:
import numpy as np
import pandas as pd
exo = pd.read_csv("exoplanets.csv")
arr = np.array(exo)
fil, col = 570, 3198
lis = []
for i in range(1, fil):
for j in range(col):
lis.append(arr[i][j].astype('str'))
结果让我震惊!只有35秒!!! 而在来自 Anaconda 的 Spyder 中只有 26 秒!!! 将近200万个花车!!! Julia 在数据分析方面比 Python 慢吗? 我可以改进 Julia 代码吗?
【问题讨论】:
-
This answer 似乎很有帮助。我会尝试在 Julia 和 Python 中预先分配数组所需的所有空间(而不是使用
push和append),然后看看它们的比较。 -
我建议通读docs.julialang.org/en/v1/manual/performance-tips(尤其是前几节讨论
global变量和“避免使用抽象类型参数的容器”)。另外,请发布指向exoplanets.csv的链接,以便人们可以运行您的代码。 -
我很确定将
arr = []声明为字符串向量会让您领先一步。但 Bogumil 的回答更好。 -
julia 有多少线程可用?
标签: python r performance julia