Ich möchte jedes Tupel X [p] in einer anderen Datei speichern X [1] in mini_batch1.jld X [2] in mini_batch2 ..... aber mein Code speichert (dupliziert) alle Tupel von X [p] in den erstellten Dateien. Nehmen wir ein Beispiel sehen:Julia: Wie Tupel in verschiedenen Dateien speichern?
m= 100
k= 3 # number of tuples or partition
y=rand_gen(m,k)
(3,[[-1.0,1.0,1.0,1.0,-1.0,-1.0,1.0,-1.0,1.0,1.0,-1.0,-1.0,1.0,1.0,-1.0,-1.0,-1.0,1.0,-1.0,1.0,1.0,1.0,1.0,-1.0,-1.0,-1.0,1.0,1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0],[1.0,-1.0,-1.0,-1.0,1.0,1.0,1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,1.0,1.0,-1.0,-1.0,1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,1.0,-1.0,1.0,-1.0,-1.0],[1.0,-1.0,-1.0,1.0,1.0,-1.0,-1.0,-1.0,1.0,-1.0,1.0,1.0,-1.0,-1.0,-1.0,-1.0,-1.0,1.0,1.0,-1.0,-1.0,1.0,1.0,1.0,1.0,1.0,-1.0,-1.0,-1.0,1.0,1.0,-1.0,1.0]])
l haben wollen: mini_batch1 das erste Tupel
[-1.0,1.0,1.0,1.0,-1.0,-1.0,1.0,-1.0,1.0,1.0,-1.0,-1.0,1.0,1.0,-1.0,-1.0,-1.0,1.0,-1.0,1.0,1.0,1.0,1.0,-1.0,-1.0,-1.0,1.0,1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0]
mini_batch2 das zweite Tupel
[1.0,-1.0,-1.0,-1.0,1.0,1.0,1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,1.0,1.0,-1.0,-1.0,1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,1.0,-1.0,1.0,-1.0,-1.0]
und so weiter. Allerdings führt mein Code die Aufgabe aus, die mini_batches-Dateien zu erstellen, speichert jedoch nicht ein Tupel nach dem anderen. Wie kann ich das beheben?
workspace()
using JLD, HDF5
function gen_random(m,k)
# m the length of the vector , for instance m=100000 and k
# the number of partitions let's set k=16
s = rand(m)
# Pkg.add("JLD"), Pkg.add("HDF5") these two packages are needed
# in order to store our vectors in files under the extension jld
# allow to convert each random number to -1 or 1
X=float_to_binary(s)
parts= kfoldperm(length(X),k)
# l want to store each tuple X[p] in a different file
# X[1] in mini_batch1.jld X[2] in mini_batch2.....
# but my code below store all the tuple X[p] in the files created.
for p in 1:length(parts)
file =jldopen(@sprintf("my path to file/mini_batch%d.jld", p),"w")
write(file, "X", [X[p] for p in parts])
close(file)
end
return [X[p] for p in parts]
function float_to_binary(s,level=0.4)
for i=1:length(s)
s[i] = s[i] > level ? 1.0 : -1.0
end
file = jldopen("/my path/mydata.jld", "w")
write(file, "s", s) # alternatively, say "@write file A"
close(file)
return s
end
function kfoldperm(l,k)
n,r = divrem(l,k)
b = collect(1:n:l+1)
for i in 1:length(b)
b[i] += i > r ? r : i-1
end
p = randperm(l)
return [p[r] for r in [b[i]:b[i+1]-1 for i=1:k]]
end
Wäre das nicht 'write (Datei„X ", X [p])' mach den Trick? (d. h. das wahrscheinliche Problem ist das Verständnis). – tholy
Nein, es funktioniert nicht, weil es den ersten Wert des ersten Tupels lesen wird. zum Beispiel wenn p = 4. X [1] ist der erste Wert des ersten Tupels, X [2] ist der zweite Wert des ersten Tupels, X [3] der dritte Wert des ersten Tupels, X [4] der vierte Wert des ersten Tupels Tupel. aber ich suche nach dieser Struktur X [1] das ganze erste Tupel, X [2] das ganze zweite Tupel und so weiter – vincet
y = gen_random (m, k) # m = 100, k = 4 zum Beispiel (4 , [[1,0,1,0,1,0,1,0,1,0, -1,0, -1,0, -1,0, -1,0,1,0,1,0, -1,0, -1,0, -1,0,1,0, -1,0,1,0, -1,0, -1,0 , -1,0,1,0, -1,0,1,0,1,0, -1,0], [1,0, -1,0,1,0, -1,0,1,0,1,0,1,0,1,0,1,0,1,0, -1,0,1,0,1,0, -1,0, 1,0, -1,0,1,0, -1,0, -1,0,1,0,1,0, -1,0, -1,0,1,0,1,0], [1,0, -1,0,1,0,1,0, -1,0,1,0, -1,0, -1,0, - 1,0,1,0,1,0,1,0, -1,0, -1,0, -1,0,1,0,1,0, -1,0,1,0, -1,0, -1,0, -1,0, -1,0, -1,0,1,0], [1.0,1.0, - 1,0, -1,0, -1,0,1,0,1,0,1,0, -1,0, -1,0,1,0,1,0,1,0, -1,0, -1,0, -1,0,1,0,1,0, -1,0, -1,0, -1,0,1,0, 1.0, -1.0,1.0]]) – vincet