Python 如何使用NumPy字符串格式化程序打印输出字符串依赖于数组值的NumPy数组?

Python 如何使用NumPy字符串格式化程序打印输出字符串依赖于数组值的NumPy数组?,python,arrays,numpy,scipy,formatting,Python,Arrays,Numpy,Scipy,Formatting,我想根据NumPy数组中的值打印一个字符串,例如,value0应指向字母'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']]

我想根据NumPy数组中的值打印一个字符串,例如,value
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.]]
观察到:

[['b' 'c']
 ['a' 'a']]
[[1. 2.]
 [0. 0.]]

for的关键字参数
formatter
需要要替换的数组元素的类型,而不是要转换的类型

因此,在您的示例中,应该使用
float
,而不是
str
,因为
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\u kind
对你来说也是个好主意。

IIUC
vectorize

np.vectorize(printValues.get)(arr)
array([['b', 'c'],
       ['a', 'a']], dtype='<U1')
np.vectorize(printValues.get)(arr)
数组([['b','c'],
['a','a']],数据类型为