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

时间:2019-01-05 17:22:58

标签: python arrays numpy scipy formatting

我想根据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 :(得分:2)

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

因此,在您的示例中,应该使用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对您来说也是个好主意。

答案 1 :(得分:2)

IIUC vectorize

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