Я играл с Julia, потому что он кажется синтаксически похожим на python (который мне нравится), но утверждает, что он быстрее. Тем не менее, я попытался сделать подобный сценарий то, что я имею в питоне для tesing, где числовые значения находятся в текстовом файле, который использует эту функцию:Попробуйте поймать или напечатать преобразование в julia - (Julia 73 секунды, Python 0,5 секунды)
function isFloat(s)
try:
float64(s)
return true
catch:
return false
end
end
По какой-то причине, это занимает много времени для текста файл с разумным количеством строк текста (~ 500000).
Зачем это было? Есть лучший способ сделать это? Какую общую особенность языка я могу понять из этого, чтобы применить ее к другим языкам?
Вот два точных сценарии я побежал со временем для справки:
питона: ~ 0,5 секунды
def is_number(s):
try:
np.float64(s)
return True
except ValueError:
return False
start = time.time()
file_data = open('SMW100.asc').readlines()
file_data = map(lambda line: line.rstrip('\n').replace(',',' ').split(), file_data)
bools = [(all(map(is_number, x)), x) for x in file_data]
print time.time() - start
Жюлиа: ~ 73,5 секунд
start = time()
function isFloat(s)
try:
float64(s)
return true
catch:
return false
end
end
x = map(x-> split(replace(x, ",", " ")), open(readlines, "SMW100.asc"))
u = [(all(map(isFloat, i)), i) for i in x]
print(start - time())
Я не знаю о производительности try/catch, но чтобы проверить, имеет ли данный файл только поплавки, вы можете попробовать использовать функцию readdlm (http://docs.julialang.org/en/latest/stdlib/ base/# Base.readdlm), который вернет Array {Float64} в случае, если это возможно (тогда вы можете просто проверить тип возвращаемого массива). –