Vinnaren i pepparkakshustävlingen!
  • 8
  • 9
2023-08-01, 13:06
  #97
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av jjjojooo
Haha.

ChatGPT tråden.

Fråga Ole vad han tycker om ChatGPT's metoder för hans parallel.

Här har du..


Sluta använda ChatGPT och våldta kommandon.

Du har inte lärt dig mycket, du har kopierat och klistrat in ett uppenbart felaktigt sätt att använda ChatGPT.

Som hela tråden har gjort. Skulle man fråga användaren som spelar AWK mästare om det är gawk, mawk, nawk eller awk som används så kommer personen inte veta svaret, så dåligt är det skrivet.

- En som är jävligt trött på ChatGPT och hela jävla forumet Flashback.org där alla helt plötsligt blivit proffs på Linux och kommandon genom att bli sämst helt enkelt.

AMATÖRER!

Användarens kod löste ju mitt problem på ett effektivt sätt, oavsett var den kommer ifrån. Sedan kan jag hålla med om att din föreslagna kod är mer illustrativ och pedagogisk, och ger mer kontroll över processen. Däremot innehöll den ett syntaxfel, och när koden kördes var den något långsammare. Att copypasta omodifierad kod från ChatGPT är inte försvarbart, där håller jag med dig. Man ska förstå vad man gör. Däremot kan den vara ett utmärkt pedagogiskt verktyg använd på rätt sätt. Noterbart är att ChatGPT inte klarade av att lösa det problem jag postade i TS, vilket jag även förmedlat tidigare i tråden. Det handlar mycket om vilka frågor man ställer, och att bli en expert på prompt engineering är aldrig fel. Mycket tid kan sparas. AI kommer i allt högre grad att byggas in i kompilatorer och debugging software anyways...
__________________
Senast redigerad av Kip.Kinkel 2023-08-01 kl. 13:09.
Citera
2023-08-30, 00:12
  #98
Medlem
Retropropagations avatar
Citat:
Ursprungligen postat av Kip.Kinkel
Men Jesus Kristus! Jag har testat R, och om du inte kör via Hadoop eller liknande, så är loppet kört. Data Tables i R är väl motsvarigheten till Data Frames i Python? Eller missminner jag mig? R har aldrig fungerat över 1M records i en csv. R är bra för sin uppgift, men inte detta.

Då har du gjort något allvarligt fel i R. Antagligen har du skrivit för många for-loopar. Det är ett vanligt nybörjarfel...

Jag har gjort några undersökningar på Kaggle, så att vi tråden kan jämföra våra lösningar på samma hårdvara.

Jag sorterade en csv-fil map 3:e kolumnen. csv-filen har en header-rad, samt 10 000 000 rader och 5 kolumner numerisk data mellan 0 och 1:

Mha R tar det ca 18 sekunder att sortera filen.

Mha bash sort tar det nästan tre gånger så lång tid att sortera filen.

Mha Python tar det nästan fem gånger så lång tid tid att sortera filen.

R är alltså överlägsen vinnare!
Citera
2023-08-30, 00:21
  #99
Medlem
Retropropagations avatar
Citat:
Ursprungligen postat av susanne43
sort som använts här i tråden tidigare, är väl det mest optimala, 28 bokstäver inkl. space.

Kod:
sort -t $'\t' -k4,4nr -k5,5 ./Allsvenskan.csv > ./Allsvenskan_sorted.txt

Jag tror nog sort som framkommit sedan tidigare är överlägset bäst för det som skall göras, det är ju skapat för detta specifikt.

För det första sorterar du i bokstavsordning och inte numeriskt.

Och om csv-filen innehåller en header-rad är du helt rökt med sort... Eller har jag missat någon header-flagga för sort?
Citera
2023-09-01, 23:26
  #100
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av Retropropagation
Då har du gjort något allvarligt fel i R. Antagligen har du skrivit för många for-loopar. Det är ett vanligt nybörjarfel...

Jag har gjort några undersökningar på Kaggle, så att vi tråden kan jämföra våra lösningar på samma hårdvara.

Jag sorterade en csv-fil map 3:e kolumnen. csv-filen har en header-rad, samt 10 000 000 rader och 5 kolumner numerisk data mellan 0 och 1:

Mha R tar det ca 18 sekunder att sortera filen.

Mha bash sort tar det nästan tre gånger så lång tid att sortera filen.

Mha Python tar det nästan fem gånger så lång tid tid att sortera filen.

R är alltså överlägsen vinnare!

Jag är extremt tveksam till detta. Kan du ge lite kod som jag kan testa i R? Språket R är som Python i de flesta fall, väldigt bra, men med extremt mycket sirap. Mitt topic utgår från en optimering som kräver snabb exekvering och precision vid sorteringen. Mitt senaste exempel med bash och parallel tog 12 sekunder. På en fyra år gammal MacBook som kör Linux ska tilläggas...
__________________
Senast redigerad av Kip.Kinkel 2023-09-01 kl. 23:29.
Citera
2023-09-02, 02:23
  #101
Medlem
brukstjacks avatar
Citat:
Ursprungligen postat av Kip.Kinkel
Jag är extremt tveksam till detta. Kan du ge lite kod som jag kan testa i R? Språket R är som Python i de flesta fall, väldigt bra, men med extremt mycket sirap. Mitt topic utgår från en optimering som kräver snabb exekvering och precision vid sorteringen. Mitt senaste exempel med bash och parallel tog 12 sekunder. På en fyra år gammal MacBook som kör Linux ska tilläggas...
Har du tänkt utföra detta jobb väldigt ofta? Annars känns ju en kodbas du faktiskt förstår långt mycket mer gångbart än magi som sparar dig några klockcyklar. Om kontexten är professionell, kan nog din arbetsgivare tom tänka sig att slänga upp ett par cent för att göra beräkningen i typ AWS.
Citera
2023-09-06, 00:00
  #102
Medlem
Retropropagations avatar
Citat:
Ursprungligen postat av Kip.Kinkel
Jag är extremt tveksam till detta. Kan du ge lite kod som jag kan testa i R? Språket R är som Python i de flesta fall, väldigt bra, men med extremt mycket sirap. Mitt topic utgår från en optimering som kräver snabb exekvering och precision vid sorteringen. Mitt senaste exempel med bash och parallel tog 12 sekunder. På en fyra år gammal MacBook som kör Linux ska tilläggas...

Så här skapar jag csv-filen som skall sorteras. Notera antalet for-loopar... Exekveringstiden i Kaggle är ca 17.9s.

Kod:
# Variable names: V1,V2,V3,V4,V5

library(data.table)

nrows = 1E7
ncols = 5

nrands = nrows*ncols
set.seed(42)
df = data.table(matrix(runif(nrands), nrow=nrows, ncol=ncols))

fwrite(round(df, digits=6), "XXXL.csv")

R-skriptet som sorterar filen med avseende på 3:e kolumnen, som har namnet V3. Något förvånande är exekveringstiden i Kaggle även nu ca 17.9s.

Kod:
library(data.table)
df = fread("/kaggle/input/create-a-csv-file/XXXL.csv")
setorder(df, V3)
fwrite(df, "./XXXL_sorted.csv")

bash sort-skriptet. Obs! Jag körde skriptet i en Python-Notebook i Kaggle. Notera %%bash. Exekveringstid i Kaggle: 42.1s

Kod:
%%bash

( read header; echo $header; sort -t',' -k3 -g ) < /kaggle/input/create-a-csv-file/XXXL.csv > XXXL_sorted.csv

PS
Ett R-skript som kollar att filerna är sorterade. Notera antalet for-loopar...

Kod:
library(data.table)

Kod:
df = fread("/kaggle/input/kvicksort-r-data-table/XXXL_sorted.csv")
!is.unsorted(df$V3)

TRUE

Kod:
df = fread("/kaggle/input/kvicksort-bash/XXXL_sorted.csv")
!is.unsorted(df$V3)

TRUE

PPS
Personligen tycker jag att:

Kod:
setorder(df, V3)

är enklare att förstå än:

Kod:
( read header; echo $header; sort -t',' -k3 -g )

Men min bakgrund är Matlab och inte SINTRAN...
__________________
Senast redigerad av Retropropagation 2023-09-06 kl. 00:10.
Citera
2023-09-06, 08:05
  #103
Moderator
vhes avatar
Citat:
Ursprungligen postat av Retropropagation
Så här skapar jag csv-filen som skall sorteras. Notera antalet for-loopar... Exekveringstiden i Kaggle är ca 17.9s.

Kod:
# Variable names: V1,V2,V3,V4,V5

library(data.table)

nrows = 1E7
ncols = 5

nrands = nrows*ncols
set.seed(42)
df = data.table(matrix(runif(nrands), nrow=nrows, ncol=ncols))

fwrite(round(df, digits=6), "XXXL.csv")

R-skriptet som sorterar filen med avseende på 3:e kolumnen, som har namnet V3. Något förvånande är exekveringstiden i Kaggle även nu ca 17.9s.

Kod:
library(data.table)
df = fread("/kaggle/input/create-a-csv-file/XXXL.csv")
setorder(df, V3)
fwrite(df, "./XXXL_sorted.csv")

bash sort-skriptet. Obs! Jag körde skriptet i en Python-Notebook i Kaggle. Notera %%bash. Exekveringstid i Kaggle: 42.1s

Kod:
%%bash

( read header; echo $header; sort -t',' -k3 -g ) < /kaggle/input/create-a-csv-file/XXXL.csv > XXXL_sorted.csv

PS
Ett R-skript som kollar att filerna är sorterade. Notera antalet for-loopar...

Kod:
library(data.table)

Kod:
df = fread("/kaggle/input/kvicksort-r-data-table/XXXL_sorted.csv")
!is.unsorted(df$V3)

TRUE

Kod:
df = fread("/kaggle/input/kvicksort-bash/XXXL_sorted.csv")
!is.unsorted(df$V3)

TRUE

PPS
Personligen tycker jag att:

Kod:
setorder(df, V3)

är enklare att förstå än:

Kod:
( read header; echo $header; sort -t',' -k3 -g )

Men min bakgrund är Matlab och inte SINTRAN...

Notervärt är att R inte bibehåller datan intakt. Gissningsvis eftersom den bygger en intern tabell med numerisk data, som den sedan formatterar vid utskrift. T.ex. så görs 0.10000 om till 0.1 i ditt exempelprogram.

Detta kan så klart vara helt acceptabelt, men det är inte säkert.
Citera
2023-09-07, 21:08
  #104
Medlem
Retropropagations avatar
Citat:
Ursprungligen postat av vhe
Notervärt är att R inte bibehåller datan intakt. Gissningsvis eftersom den bygger en intern tabell med numerisk data, som den sedan formatterar vid utskrift. T.ex. så görs 0.10000 om till 0.1 i ditt exempelprogram.

Detta kan så klart vara helt acceptabelt, men det är inte säkert.

Om man vill att data i utdata-filen skall ha ett visst antal decimaler, verkar det som att format-funktionen kan hjälpa till med detta, se (*) nedan.

Men om man vill att varje rad i utdata-filen skall ha exakt samma formatering som motsvarande rad i indata-filen, måste man nog börja koda lite (utan for-loopar...).

En naiv lösning är att läsa in filen i två olika variabler. Den första med hela rader som text och den andra med kolumn 3 som tal. Och binda ihop sorteringen med order-funktionen i R. Men nu kommer exekveringen att ta betydligt längre tid.

Jag återkommer förhoppningsvis med ett "proof of concept"...

(*)

Kod:
library(data.table)
df <- data.table(x = c(1, 2, 3, 5, 8, 9),
                 y = c(0.000001, 0.00002, 0.0003, 0.005, 0.08, 0.9))

fwrite(df, "./Gais.txt", sep=";")

df_string <- format(df, digits=6, scientific=F)

fwrite(df_string, "./Gais_format.txt", sep=";")

Gais.txt:
Kod:
x;y
1;1e-06
2;2e-05
3;3e-04
5;0.005
8;0.08
9;0.9

Gais_format.txt
Kod:
x;y
1;0.000001
2;0.000020
3;0.000300
5;0.005000
8;0.080000
9;0.900000

Obs! Riktiga R:are använder <- istället för =...

Noterbart är vidare att x inte får formatet 1.000000 osv...
Citera
2023-09-07, 21:17
  #105
Moderator
vhes avatar
Citat:
Ursprungligen postat av Retropropagation
En naiv lösning är att läsa in filen i två olika variabler. Den första med hela rader som text och den andra med kolumn 3 som tal. Och binda ihop sorteringen med order-funktionen i R. Men nu kommer exekveringen att ta betydligt längre tid.

Jo, det var lite det jag funderade på. R hade onekligen imponerande prestanda när man "spelade efter dess regler", så att säga. Vilket ju egentligen inte är särskilt förvånande. Det har ju optimerat för ett visst användningsområde.

Spontant känns det i det här fallet som att begränsningen är helt acceptabel, det beror så klart på TS exakta användningsfall.

Får medge att jag var tvungen att installera R-miljön bara för att testa. Jag tyckte att ditt påstående lät lite väl bra. Men jag fick motsvarande siffror hos mig. I stand corrected, som det heter :-) Det enda jag funderar på är hur det beter sig om data-settet inte får plats i RAM. UNIX sort löser ju det med temporärfiler. Gissar att en såpass generisk funktion som setorder inte gör det, men jag har egentligen inte en susning.
Citera
2023-09-08, 00:13
  #106
Medlem
Retropropagations avatar
Citat:
Ursprungligen postat av Retropropagation
En naiv lösning är att läsa in filen i två olika variabler. Den första med hela rader som text och den andra med kolumn 3 som tal. Och binda ihop sorteringen med order-funktionen i R. Men nu kommer exekveringen att ta betydligt längre tid.

Jag återkommer förhoppningsvis med ett "proof of concept"...

Mycket riktigt, en exekveringstid på ca 41.5s:
Kod:
library(data.table)

file.name <- "/kaggle/input/create-a-csv-file/XXXL.csv"
# When sep='\n', the data will be read in single-column mode.
df.single.column <- fread(file.name, sep='\n') 
df.column.3 <- fread(file.name, select=c(3))

df.sorted <- df.single.column[order(df.column.3)]

fwrite(df.sorted, "./XXXL_sorted.csv", quote=F)

PS
Citat:
Ursprungligen postat av Retropropagation
Obs! Riktiga R:are använder <- istället för =...

Och namnger variabler som file.name och inte file_name, filename, fileName eller lpszFileName.
Citera
2023-09-08, 00:26
  #107
Medlem
Kan starkt rekommendera att du använder dig av en Apache Spark lösning i Python, läs om Pythons PySpark bibliotek. Också en dataframe som Pandas, men mer byggd för big data lösningar.
Citera
2023-09-09, 23:02
  #108
Medlem
Retropropagations avatar
Citat:
Ursprungligen postat av vhe
<...>
Det enda jag funderar på är hur det beter sig om data-settet inte får plats i RAM. UNIX sort löser ju det med temporärfiler. Gissar att en såpass generisk funktion som setorder inte gör det, men jag har egentligen inte en susning.

Då är man rökt...

Men man kan ju fylla på datorn med billigt RAM. Vill minnas att John Carmack körde med 1936 GB i våras. (För att lösa ett något svårare problem än sortering...)

Nästa steg kan möjligen vara SQLite, DuckDB eller Apache Arrow:

https://stackoverflow.com/questions/...-supported-yet

Citat:
fread() fails when reading large file ~335GB with this error. appreciate any suggestions on how to resolve this.

Men då går det 20 gånger långsammare vill jag minnas...
Citera
  • 8
  • 9

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback