Array Manipulation Routines β SolutionsΒΆ
These solutions demonstrate how to reshape, transpose, concatenate, split, tile, repeat, trim, and flip arrays using NumPyβs manipulation functions. Many questions show multiple valid approaches β for example, np.concatenate() with an axis parameter vs. the convenience wrappers np.hstack() and np.vstack(). Understanding these alternatives helps you choose the most readable option for each situation.
import numpy as np
np.__version__
Q1. Let x be a ndarray [10, 10, 3] with all elements set to one. Reshape x so that the size of the second dimension equals 150.
x = np.ones([10, 10, 3])
out = np.reshape(x, [-1, 150])
print out
assert np.allclose(out, np.ones([10, 10, 3]).reshape([-1, 150]))
Q2. Let x be array [[1, 2, 3], [4, 5, 6]]. Convert it to [1 4 2 5 3 6].
x = np.array([[1, 2, 3], [4, 5, 6]])
out1 = np.ravel(x, order='F')
out2 = x.flatten(order="F")
assert np.allclose(out1, out2)
print out1
Q3. Let x be array [[1, 2, 3], [4, 5, 6]]. Get the 5th element.
x = np.array([[1, 2, 3], [4, 5, 6]])
out1 = x.flat[4]
out2 = np.ravel(x)[4]
assert np.allclose(out1, out2)
print out1
Q4. Let x be an arbitrary 3-D array of shape (3, 4, 5). Permute the dimensions of x such that the new shape will be (4,3,5).
x = np.zeros((3, 4, 5))
out1 = np.swapaxes(x, 1, 0)
out2 = x.transpose([1, 0, 2])
assert out1.shape == out2.shape
print out1.shape
Q5. Let x be an arbitrary 2-D array of shape (3, 4). Permute the dimensions of x such that the new shape will be (4,3).
x = np.zeros((3, 4))
out1 = np.swapaxes(x, 1, 0)
out2 = x.transpose()
out3 = x.T
assert out1.shape == out2.shape == out3.shape
print out1.shape
Q5. Let x be an arbitrary 2-D array of shape (3, 4). Insert a nex axis such that the new shape will be (3, 1, 4).
x = np.zeros((3, 4))
print np.expand_dims(x, axis=1).shape
Q6. Let x be an arbitrary 3-D array of shape (3, 4, 1). Remove a single-dimensional entries such that the new shape will be (3, 4).
x = np.zeros((3, 4, 1))
print np.squeeze(x).shape
Q7. Lex x be an array
[[ 1 2 3]
[ 4 5 6].
and y be an array
[[ 7 8 9]
[10 11 12]].
Concatenate x and y so that a new array looks like
[[1, 2, 3, 7, 8, 9],
[4, 5, 6, 10, 11, 12]].
x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.array([[7, 8, 9], [10, 11, 12]])
out1 = np.concatenate((x, y), 1)
out2 = np.hstack((x, y))
assert np.allclose(out1, out2)
print out2
Q8. Lex x be an array
[[ 1 2 3]
[ 4 5 6].
and y be an array
[[ 7 8 9]
[10 11 12]].
Concatenate x and y so that a new array looks like
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.array([[7, 8, 9], [10, 11, 12]])
out1 = np.concatenate((x, y), 0)
out2 = np.vstack((x, y))
assert np.allclose(out1, out2)
print out2
Q8. Let x be an array [1 2 3] and y be [4 5 6]. Convert it to [[1, 4], [2, 5], [3, 6]].
x = np.array((1,2,3))
y = np.array((4,5,6))
out1 = np.column_stack((x, y))
out2 = np.squeeze(np.dstack((x, y)))
out3 = np.vstack((x, y)).T
assert np.allclose(out1, out2)
assert np.allclose(out2, out3)
print out1
Q9. Let x be an array [[1],[2],[3]] and y be [[4], [5], [6]]. Convert x to [[[1, 4]], [[2, 5]], [[3, 6]]].
x = np.array([[1],[2],[3]])
y = np.array([[4],[5],[6]])
out = np.dstack((x, y))
print out
Q10. Let x be an array [1, 2, 3, β¦, 9]. Split x into 3 arrays, each of which has 4, 2, and 3 elements in the original order.
x = np.arange(1, 10)
print np.split(x, [4, 6])
Q11. Let x be an array
[[[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.]],
[[ 8., 9., 10., 11.],
[ 12., 13., 14., 15.]]].
Split it into two such that the first array looks like
[[[ 0., 1., 2.],
[ 4., 5., 6.]],
[[ 8., 9., 10.],
[ 12., 13., 14.]]].
and the second one look like:
[[[ 3.],
[ 7.]],
[[ 11.],
[ 15.]]].
x = np.arange(16).reshape(2, 2, 4)
out1 = np.split(x, [3],axis=2)
out2 = np.dsplit(x, [3])
assert np.allclose(out1[0], out2[0])
assert np.allclose(out1[1], out2[1])
print out1
Q12. Let x be an array
[[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[ 12., 13., 14., 15.]].
Split it into two arrays along the second axis.
x = np.arange(16).reshape((4, 4))
out1 = np.hsplit(x, 2)
out2 = np.split(x, 2, 1)
assert np.allclose(out1[0], out2[0])
assert np.allclose(out1[1], out2[1])
print out1
Q13. Let x be an array
[[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[ 12., 13., 14., 15.]].
Split it into two arrays along the first axis.
x = np.arange(16).reshape((4, 4))
out1 = np.vsplit(x, 2)
out2 = np.split(x, 2, 0)
assert np.allclose(out1[0], out2[0])
assert np.allclose(out1[1], out2[1])
print out1
Q14. Let x be an array [0, 1, 2]. Convert it to
[[0, 1, 2, 0, 1, 2],
[0, 1, 2, 0, 1, 2]].
x = np.array([0, 1, 2])
out1 = np.tile(x, [2, 2])
out2 = np.resize(x, [2, 6])
assert np.allclose(out1, out2)
print out1
Q15. Let x be an array [0, 1, 2]. Convert it to
[0, 0, 1, 1, 2, 2].
x = np.array([0, 1, 2])
print np.repeat(x, 2)
Q16. Let x be an array [0, 0, 0, 1, 2, 3, 0, 2, 1, 0].
remove the leading the trailing zeros.
x = np.array((0, 0, 0, 1, 2, 3, 0, 2, 1, 0))
out = np.trim_zeros(x)
print out
Q17. Let x be an array [2, 2, 1, 5, 4, 5, 1, 2, 3]. Get two arrays of unique elements and their counts.
x = np.array([2, 2, 1, 5, 4, 5, 1, 2, 3])
u, indices = np.unique(x, return_counts=True)
print u, indices
Q18. Lex x be an array
[[ 1 2]
[ 3 4].
Flip x along the second axis.
x = np.array([[1,2], [3,4]])
out1 = np.fliplr(x)
out2 = x[:, ::-1]
assert np.allclose(out1, out2)
print out1
Q19. Lex x be an array
[[ 1 2]
[ 3 4].
Flip x along the first axis.
x = np.array([[1,2], [3,4]])
out1 = np.flipud(x)
out2 = x[::-1, :]
assert np.allclose(out1, out2)
print out1
Q20. Lex x be an array
[[ 1 2]
[ 3 4].
Rotate x 90 degrees counter-clockwise.
x = np.array([[1,2], [3,4]])
out = np.rot90(x)
print out
Q21 Lex x be an array
[[ 1 2 3 4]
[ 5 6 7 8].
Shift elements one step to right along the second axis.
x = np.arange(1, 9).reshape([2, 4])
print np.roll(x, 1, axis=1)