Ключевому аргументу formatter
для array2string
нужен тип элементов массива, который вы хотите заменить, а не тип, в который вы конвертируете.
Итак, в вашем примере вместо str
вы должны использовать float
, поскольку 0.
, 1.
и 2.
являются числами с плавающей запятой.
Если вы хотите убедиться, что каждый элемент массива определенно напечатан вашим форматером, используйте all
:
import numpy as np
arr = np.zeros((2, 2))
arr[(0, 0)] = 1
arr[(0, 1)] = 2
printValues = {0: 'a', 1: 'b', 2: 'c'}
print(np.array2string(arr, formatter={'all': lambda x: printValues[int(x)]}))
См. Выше связанную документацию для более доступных типов. Может быть, float_kind
тоже хорошая идея для вас.