我想打印这个数组:
a = np.array([[0, 1, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0], [0, 0, 0, 0]], dtype=bool)
.8..
8888
....
....
无需遍历双循环中的每个元素。像这样的简洁函数:
def showGrid(g):
print(np.vectorize(lambda x: '8' if x else '.')(g))
但不带标准分隔符:
[['.' '8' '.' '.']
['8' '8' '8' '8']
['.' '.' '.' '.']
['.' '.' '.' '.']]
我找不到一种方法使np.set_printoptions
放弃标准numpy数组格式分隔符。这可能吗?如果没有,请参考任何相关的numpy技巧。
首先,使用np.where
来优化您当前的代码,这与使用np.vectorize
包装的函数相同且更快:
>>> np.where(a, '8', '.')
array([['.', '8', '.', '.'],
['8', '8', '8', '8'],
['.', '.', '.', '.'],
['.', '.', '.', '.']], dtype='<U1')
要连接每行中的字符,我更喜欢使用ndarray.view
,它将以非常低的成本创建视图。它将每行中的所有字符视为长度为4的字符串:
>>> np.where(a, '8', '.').view('<U4')
array([['.8..'],
['8888'],
['....'],
['....']], dtype='<U4')
然后使用ndarray.ravel()
或ndarray.flat
将平面结果解包到print
函数中,使用换行符作为分隔符:
>>> print(*np.where(a, '8', '.').view('<U4').flat, sep='n')
.8..
8888
....
....
或者使用str.join
来获取完整的字符串:
>>> print('n'.join(np.where(a, '8', '.').view('<U4').flat))
.8..
8888
....
....