How to mix / intersperse two .npy files?
Question:
I have two .npy
files that both contain a ndarray with shape (1_000_000, 833)
(1M inputs for a neural network with 833 input neurons), however the exact shape should not matter except that it is the same among the two files.
I want to create two new .npy
files that are taken from both files, one after the other. Let’s say the first file contains [1, 2, 3, 4, 5, 6]
and the second one [a, b, c, d, e, f]
, then the new first file should contain [1, a, 2, b, 3, c]
and the new second one [4, d, 5, e, 6, f]
– the size of the files and the contents should remain the same, only its arrangement (and arrangement among the files) should change.
How could I achieve this behavior?
Answers:
You can achieve this behavior, by using the numpy.concatenate() function. This function takes two numpy arrays as input and returns a new array that is the result of the concatenation of the two. For example, given two numpy arrays A and B:
A = np.array([1, 2, 3, 4, 5, 6])
B = np.array([a, b, c, d, e, f])
C = np.concatenate([A, B])
This will give you the resulting array C that contains the values [1, a, 2, b, 3, c, 4, d, 5, e, 6, f].
You can then save this array to a new numpy file using the numpy.save() function. For example,
np.save('new_file.npy', C)
This will save the array C to a new file called ‘new_file.npy’. You can then repeat this process for the second file, using the same concatenation and save functions.
You can use vstack
to concatenate the arrays in 2D, then ravel
in Fortran order:
A = np.array([1, 2, 3, 4, 5, 6])
B = np.array(['a', 'b', 'c', 'd', 'e', 'f'])
C = np.vstack([A, B]).ravel(order='F')
Or:
C = np.empty(A.shape[0]+B.shape[0], dtype=B.dtype)
C[::2] = A
C[1::2] = B
Output:
array(['1', 'a', '2', 'b', '3', 'c', '4', 'd', '5', 'e', '6', 'f'],
dtype='<U21')
multiple arrays:
l = [np.array([1, 2, 3, 4, 5, 6])+10*i for i in range(50)]
# option 1
out = np.vstack(l).ravel(order='F')
# option 2
out = np.empty(sum(map(len, l)))
for i, a in enumerate(l):
out[i::len(l)] = a
I have two .npy
files that both contain a ndarray with shape (1_000_000, 833)
(1M inputs for a neural network with 833 input neurons), however the exact shape should not matter except that it is the same among the two files.
I want to create two new .npy
files that are taken from both files, one after the other. Let’s say the first file contains [1, 2, 3, 4, 5, 6]
and the second one [a, b, c, d, e, f]
, then the new first file should contain [1, a, 2, b, 3, c]
and the new second one [4, d, 5, e, 6, f]
– the size of the files and the contents should remain the same, only its arrangement (and arrangement among the files) should change.
How could I achieve this behavior?
You can achieve this behavior, by using the numpy.concatenate() function. This function takes two numpy arrays as input and returns a new array that is the result of the concatenation of the two. For example, given two numpy arrays A and B:
A = np.array([1, 2, 3, 4, 5, 6])
B = np.array([a, b, c, d, e, f])
C = np.concatenate([A, B])
This will give you the resulting array C that contains the values [1, a, 2, b, 3, c, 4, d, 5, e, 6, f].
You can then save this array to a new numpy file using the numpy.save() function. For example,
np.save('new_file.npy', C)
This will save the array C to a new file called ‘new_file.npy’. You can then repeat this process for the second file, using the same concatenation and save functions.
You can use vstack
to concatenate the arrays in 2D, then ravel
in Fortran order:
A = np.array([1, 2, 3, 4, 5, 6])
B = np.array(['a', 'b', 'c', 'd', 'e', 'f'])
C = np.vstack([A, B]).ravel(order='F')
Or:
C = np.empty(A.shape[0]+B.shape[0], dtype=B.dtype)
C[::2] = A
C[1::2] = B
Output:
array(['1', 'a', '2', 'b', '3', 'c', '4', 'd', '5', 'e', '6', 'f'],
dtype='<U21')
multiple arrays:
l = [np.array([1, 2, 3, 4, 5, 6])+10*i for i in range(50)]
# option 1
out = np.vstack(l).ravel(order='F')
# option 2
out = np.empty(sum(map(len, l)))
for i, a in enumerate(l):
out[i::len(l)] = a