I have a very large numpy array (containing up to a million elements) like the one below:
[ 0 1 6 5 1 2 7 6 2 3 8 7 3 4 9 8 5 6 11 10 6 7 12 11 7
8 13 12 8 9 14 13 10 11 16 15 11 12 17 16 12 13 18 17 13 14 19 18 15 16
21 20 16 17 22 21 17 18 23 22 18 19 24 23]
and a small dictionary map for replacing some of the elements in the above array
{4: 0, 9: 5, 14: 10, 19: 15, 20: 0, 21: 1, 22: 2, 23: 3, 24: 0}
I would like to replace some of the elements according to the map above. The numpy array is really large, and only a small subset of the elements (occurring as keys in the dictionary) will be replaced with the corresponding values. What is the fastest way to do this?
Well, you need to make one pass through
theArray
, and for each element replace it if it is in the dictionary.Another more general way to achieve this is function vectorization:
No solution was posted still without a python loop on the array (except Celil's one, which however assume numbers are "small"), so here is an alternative:
the way "idces" is created comes from here.