如何无分隔符打印布尔类型NumPy数组?
布尔型NumPy数组的自定义格式打印技巧
关于np.set_printoptions的可行性
无法通过np.set_printoptions实现完全去除数组默认的括号、引号与空格分隔符。该配置项主要用于调整数值打印的精度、显示阈值等参数,无法彻底修改字符串数组的输出格式为纯文本行模式。
可行的NumPy实现方法
以下几种方法无需双重循环遍历每个元素,即可实现目标输出:
方法1:结合np.where与np.apply_along_axis
通过np.where完成布尔值到目标字符的映射,再用np.apply_along_axis将每行字符拼接为字符串,最后逐行打印:
import numpy as np a = np.array([[0, 1, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0], [0, 0, 0, 0]], dtype=bool) def showGrid(g): # 将布尔数组映射为字符数组 char_grid = np.where(g, '8', '.') # 对每行执行字符串拼接 line_strings = np.apply_along_axis(''.join, axis=1, arr=char_grid) # 打印所有行 print('\n'.join(line_strings)) showGrid(a)
输出结果:
.8.. 8888 .... ....
方法2:扁平化数组后按行分割拼接
先将字符数组扁平化,再按原数组的列数拆分并拼接每行内容:
def showGrid(g): char_flat = np.where(g, '8', '.').flatten() col_count = g.shape[1] # 按列数拆分扁平化后的字符数组,拼接每行 line_strings = [''.join(char_flat[i:i+col_count]) for i in range(0, len(char_flat), col_count)] print('\n'.join(line_strings))
方法3:利用np.char.array的拼接特性
借助np.char.array的sum方法实现行内字符拼接:
def showGrid(g): char_arr = np.char.array(np.where(g, '8', '.')) # sum(axis=1)会将每行的字符拼接为单个字符串 print('\n'.join(char_arr.sum(axis=1)))
内容的提问来源于stack exchange,提问作者Paul Jurczak
相关产品推荐
相关产品推荐

