Как использовать формататор строк NumPy для печати массива NumPy, где выходная строка зависит от значения массива? - PullRequest
0 голосов
/ 05 января 2019

Я хочу напечатать строку в зависимости от значений в массиве NumPy, например, значение 0 должно приводить к букве 'a'.

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={'str':lambda x: printValues[x]}))

Ожидаемый результат:

[['b' 'c']
 ['a' 'a']]

Наблюдаемые:

[[1. 2.]
 [0. 0.]]

Ответы [ 2 ]

0 голосов
/ 05 января 2019

IIUC vectorize

np.vectorize(printValues.get)(arr)
array([['b', 'c'],
       ['a', 'a']], dtype='<U1')
0 голосов
/ 05 января 2019

Ключевому аргументу 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 тоже хорошая идея для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...