如何使用NumPy字符串格式化程序打印一个NumPy数组,其中输出字符串取决于数组的值?

4
我希望根据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个回答

2
关于array2string的关键字参数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_kind 对您也是一个不错的选择。

2

IIUC vectorize

np.vectorize(printValues.get)(arr)
array([['b', 'c'],
       ['a', 'a']], dtype='<U1')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接