J'ai un énorme ensemble de données que j'ai divisé en k mini ensembles de données où k=100. Sachez que je veux stocker ces mini-ensembles de données dans différents fichiers. pour stocker mon énorme ensemble de données, j'ai utilisé les instructions suivantes :

using JLD, HDF5
    X=rand(100000)
    file = jldopen("path to my file/mydata.jld", "w") # the extension of file is jld so you should add packages JLD and HDF5,  Pkg.add("JLD"), Pkg.add("HDF5"),
    write(file, "X", X)  # alternatively, say "@write file A"
    close(file)

Je sais que j'ai divisé mon ensemble de données en k sous-ensemble de données où k = 100

function get_mini_batch(X)

    mini_batches = round(Int, ceil(X / 100))

            for i=1:mini_batches
                mini_batch = X[((i-1)*100 + 1):min(i*100, end)]
                file= jldopen("/path to my file/mydata.jld", "w")
                write(file, "mini_batch", mini_batch)  # alternatively, say "@write file mini_batch"
                 lose(file)
            end
end

Mais cette fonction permet de stocker les différents sous-ensembles de données dans un seul fichier qui est écrasé à chaque itération.

file= jldopen("/path to my file/mydata1.jld", "w")  # at each iteration l want to get files : mydata1, mydata2 ... mydata100
file= jldopen("/path to my file/mydata2.jld", "w")
file= jldopen("/path to my file/mydata3.jld", "w")
file= jldopen("/path to my file/mydata4.jld", "w")
.
.
.
file= jldopen("/path to my file/mydata100.jld", "w")

Sinon, j'ai essayé cette fonction de procédure get_mini_batch (X)

    mini_batches = round(Int, ceil(X / 100))

            for i=1:mini_batches
                mini_batch[i] = X[((i-1)*100 + 1):min(i*100, end)]
                file[i]= jldopen("/path to my file/mydata.jld", "w")
                write(file, "mini_batch", mini_batch)  # alternatively, say "@write file mini_batch"
                 lose(file)
            end
end

Mais je ne sais pas comment créer une variable i=1....100 dans cette ligne de code file[i]= jldopen("/path to my file/mydata(i).jld< /strong>", "w")

2
vincet 24 juin 2016 à 14:54

2 réponses

Meilleure réponse

Vous recherchez du formatage de chaîne.

Pour créer les noms de fichiers, vous pouvez utiliser @sprintf(). Ensuite, vous pouvez utiliser ces chaînes pour écrire vos objets sur le disque.

julia> using Printf  # Needed in Julia 1.0.0
julia> @sprintf("myfilename%02.d.jld", 5)
"myfilename05.jld"

Exemple en boucle :

julia> for i in 1:3
           println(@sprintf("myfilename%03.d.jl", i))
       end
myfilename001.jl
myfilename002.jl
myfilename003.jl

J'ai utilisé %03.d ici pour montrer comment ajouter des zéros non significatifs à vos noms de fichiers. Cela vous aidera plus tard pour le tri.

5
Julia Learner 21 sept. 2018 à 09:07

Je suis d'accord avec niczky12 que vous recherchez un formatage de chaîne. Mais je l'écrirais personnellement de cette manière alternative:

"/path to my file/mydata$i.jld"

Au lieu d'utiliser sprintf.

Exemple:

julia> i = 4
4

julia> "/path/mydata$i.jld"
"/path/mydata4.jld"
1
Fengyang Wang 24 juin 2016 à 16:25