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?

Asked By: leo848

||

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.

Answered By: Adrian Rudy Dacka

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
Answered By: mozway
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.