I have numpy array like:
x = np.array([
...
[[0, 0, 0, 0],
[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 0, 0]]
...
])
with shape (4800, 4, 4)
.
So i need to replace every 0
with [1, 1, 2]
and every 1
with [5, 5, 9]
Result should be like this:
[[[1, 1, 2], [1, 1, 2], [1, 1, 2], [1, 1, 2]],
[[1, 1, 2], [5, 5, 9], [5, 5, 9], [1, 1, 2]],
[[1, 1, 2], [5, 5, 9], [5, 5, 9], [1, 1, 2]],
[[1, 1, 2], [1, 1, 2], [1, 1, 2], [1, 1, 2]]]
How do I do this?
CodePudding user response:
Take advantage of the fact that you have 0 and 1, define a mapper array and index it:
# 0 1
mapper = np.array([[1, 1, 2], [5, 5, 9]])
out = mapper[a]
output:
array([[[[1, 1, 2],
[1, 1, 2],
[1, 1, 2],
[1, 1, 2]],
[[1, 1, 2],
[5, 5, 9],
[5, 5, 9],
[1, 1, 2]],
[[1, 1, 2],
[5, 5, 9],
[5, 5, 9],
[1, 1, 2]],
[[1, 1, 2],
[1, 1, 2],
[1, 1, 2],
[1, 1, 2]]]])
CodePudding user response:
You can create a new array and assign the values according to the value in the old one.
import numpy as np
x = np.array([
[[0, 0, 0, 0],
[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 0, 0]]
])
x_new = np.zeros((*(x.shape), 3))
x_new[x==0] = [1, 1, 2]
x_new[x==1] = [5, 5, 9]
print(x_new)
This results in the following output:
[[[[1. 1. 2.]
[1. 1. 2.]
[1. 1. 2.]
[1. 1. 2.]]
[[1. 1. 2.]
[5. 5. 9.]
[5. 5. 9.]
[1. 1. 2.]]
[[1. 1. 2.]
[5. 5. 9.]
[5. 5. 9.]
[1. 1. 2.]]
[[1. 1. 2.]
[1. 1. 2.]
[1. 1. 2.]
[1. 1. 2.]]]]