Menemukan kesalahan di Julia untuk analisis data – Beragampengetahuan
Oleh: Blog Bogumił Kamiński
Repost dari:
Beberapa bulan yang lalu, buku saya Julia tentang Analisis Data dirilis.
Saya berusaha sangat keras untuk memperbaikinya. Sayangnya, saya gagal.
Untungnya, pembaca saya lebih berhati-hati daripada saya, dan mereka menemukan beberapa masalah
Dalam buku saya. Saya menyimpan log mereka di bagian Errata di GitHub
toko buku.
Dalam posting ini, saya ingin berbagi dengan Anda pengalaman saya tentang berbagai jenis kesalahan
Geser ke dalam buku dan beri komentar tentang bagaimana menurut saya hal itu dapat dihindari.
Pengalaman saya adalah bahwa ada tiga jenis masalah penting:
- banyak kesalahan tipografi dan tipografi;
- konsistensi eksekusi kode di seluruh instance Julia;
- kesalahan yang sebenarnya.
Biarkan saya melewati lapisan-lapisan ini secara berurutan.
Kesalahan seperti itu menyelinap masuk karena berbagai alasan. Biarkan saya menyoroti beberapa yang telah digigit
saya dan dapat dihindari.
Yang pertama adalah mencetak karakter UTF-8 non-standar. Ini adalah hal-hal yang mengganggu. di saya
versi buku semuanya terlihat sangat bagus, tetapi ketika dicetak
proses persiapan, entah bagaimana di sepanjang jalan beberapa karakter menjadi kacau.
Contoh di Bab 6, bagian 6.4.1, halaman 132codeunits("ε") dicetak sebagai codeunits("?").
Beli dan ambil: Sebelum buku Anda diterbitkan, selalu teliti bagian-bagian ini
teks tempat Anda menggunakan karakter UTF-8 non-standar (kasus umum di Julia).
Yang kedua adalah efek samping dari penggunaan banyak pilihan atau penggantian otomatis
Editor. Misalnya di Bab 3, bagian 3.2.3, halaman 59 saya punya
masalah yang saya tulis sort(v::AbstractVector; kwthe.) alih-alihsort(v::AbstractVector; kws...). Jelas saya harus menggunakan beberapa
pencocokan dan penggantian pola s.. dengan the. Aku bahkan tidak ingat kenapa.
Beli dan ambil: banyak pilihan dan penggantian otomatis baik-baik saja, tetapi jangan pernah melakukannya
Global; sebaiknya tinjau setiap perubahan sebelum mendaftar (jangan lakukan itu
mereka secara otomatis dalam satu tembakan; sulit untuk menolak, tapi inilah dirimu
benar-benar tidak boleh dilakukan).
Ada banyak rasa dari masalah ini. Itu terutama dapat diselesaikan dengan menggunakan ketat
file Project.toml dan Manifest.toml, tetapi terkadang terjadi hal yang tidak terduga.
Sebagai contoh, pada Bab 1, bagian 1.2.1, halaman 7, saya tampilkan kutipan berikut:
julia> function sum_n(n)
s = 0
for i in 1:n
s += i
end
return s
end
sum_n (generic function with 1 method)
julia> @time sum_n(1_000_000_000)
0.000001 seconds
500000000500000000
Kali ini sangat cepat (dan mengapa dijelaskan dalam buku).
Masalahnya ini adalah situasi di Julia 1.7 karena ini adalah versinya
bahasa yang saya gunakan dalam buku ini.
Di bawah Julia 1.8 dan Julia 1.9, menjalankan kode yang sama membutuhkan waktu lebih lama
(diuji dalam Julia 1.9-beta4):
julia> @time sum_n(1_000_000_000)
2.265569 seconds
500000000500000000
Alasan ketidakkonsistenan ini adalah kesalahan dalam @time makro yang diperkenalkan di
Julia 1.8 rilis. Itu sum_n(1_000_000_000) panggilan (no @time) dieksekusi
cepat. Inilah tolok ukur yang disederhanakan (berjalan di Julia 1.9-beta4) yang menunjukkan ini:
julia> let
start = time_ns()
v = sum_n(1_000_000_000)
stop=time_ns()
v, Int(stop - start)
end
(500000000500000000, 1000)
Sayangnya, ada masalah dengan @time makro digunakan dalam lingkup global
membuat waktunya tidak tepat. Bug ini perlu diselesaikan di
Dasar Julia. Lihat masalah ini untuk detailnya.
Beli dan ambil: banyak hal dapat berubah seiring perkembangan perangkat lunak; selalu dijamin
Beri tahu pembaca Anda dengan jelas versi dan konfigurasi perangkat lunak apa yang mereka miliki
harus digunakan untuk menjalankan kode Anda.
Ini adalah masalah yang paling sulit, karena saya benar-benar merasa tidak enak ketika saya mengetahui bahwa saya memilikinya
menulis sesuatu yang tidak sepenuhnya benar. Saya akan memberi Anda sebuah contoh
dari Bab 2, bagian 2.3.1, halaman 30.
Manual Julia di bagian Evaluasi Sirkuit Pendek menyatakan:
Alih-alih
if <cond> <statement> endseseorang dapat menulis<cond> && <statement>
(dapat dibaca sebagai:<cond>Dan setelah itu<statement>).
Demikian pula, alih-alih jikaif ! <cond> <statement> endseseorang dapat menulis<cond> || <statement>(dapat dibaca sebagai:<cond>atau sesuatu yang lain<statement>).
Demikian pula, dalam buku saya, saya mempertimbangkan ungkapan-ungkapan berikut:
Dan
Di mana x = -7.
Saya menulis di buku bahwa Julia menafsirkan keduanya dengan cara yang sama.
Memang benar bahwa ekspresi yang sama dievaluasi dalam kedua kasus.
Namun, secara umum if menyatakan dan melakukan evaluasi hubung singkat
tidak setara.
Apa bedanya? Jika kondisi akan false maka nilai dari if
pernyataan (tidak else) Menjadi nothing dan nilai ekspresi menggunakan
hubung singkat adalah false. Ini contohnya:
julia> x = -7
-7
julia> show(x > 0 && println(x))
false
julia> show(if x > 0
println(x)
end)
nothing
Perbedaannya halus, tetapi jika Anda akan menggunakannya
nilai nanti dalam kode Anda, itu bisa menjadi penting.
Beli dan ambil: selalu hati-hati mempertimbangkan semua aspek dari kode yang Anda sajikan.
Sebagai penutup, saya ingin meminta semua orang yang membaca buku saya untuk berbagi dengan saya
umpan balik Anda. Saya akan mencoba memasukkannya dalam rilis buku berikutnya
dengan cara terbaik yang saya bisa.
Terkait
Software Terbaru Saat Ini
Aplikasi yang sedang trend saat ini
object oriented programming, programming language, programming adalah, web programming, belajar programming, tournament software, software, software adalah, contoh software, apa itu software, pengertian software, aplikasi, aplikasi penghasil uang, aplikasi bokep, aplikasi video, programming
#Menemukan #kesalahan #Julia #untuk #analisis #data