我正在学习python3,我想打印一个采用彩色编码(CLI)的matrix / 2d数组。因此,假设我要为这些整数中的每一个分配特定的背景颜色,以创建马赛克样式的外观。
我已经弄清楚了如何用随机整数填充给定大小的矩阵,但是我无法确定如何从此继续实现矩阵中每个单独条目的背景色,具体取决于其价值。这是我走了多远:
from random import randint
import numpy as np
def generate():
n = 10
m = 0
map = np.random.randint(4 + 1, size=(n, n))
print(map)
for element in np.nditer(map):
# iterating over each column is probably not the way to go...
generate()
有没有办法做到这一点?我正在考虑遍历矩阵的每一列,并通过几个条件检查输入项是0、1、2、3还是4,然后根据条件将具有特定背景颜色的值附加到新矩阵中,但我认为有一种更优雅的方法可以做到这一点...
答案 0 :(得分:1)
以下内容将在控制台上print
显示彩色输出...
>>> map = np.random.randint(4 + 1, size=(10, 10))
>>> def get_color_coded_str(i):
... return "\033[3{}m{}\033[0m".format(i+1, i)
...
>>> map_modified = np.vectorize(get_color_coded_str)(map)
>>> print("\n".join([" ".join(["{}"]*10)]*10).format(*[x for y in map_modified.tolist() for x in y]))
>>>
要添加背景色,请使用fn
>>> def get_color_coded_str(i):
... return "\033[4{}m{}\033[0m".format(i+1, i)
from random import randint
import numpy as np
def get_color_coded_str(i):
return "\033[3{}m{}\033[0m".format(i+1, i)
def get_color_coded_background(i):
return "\033[4{}m {} \033[0m".format(i+1, i)
def print_a_ndarray(map, row_sep=" "):
n, m = map.shape
fmt_str = "\n".join([row_sep.join(["{}"]*m)]*n)
print(fmt_str.format(*map.ravel()))
n = 10
m = 20
map = np.random.randint(4 + 1, size=(n, m))
map_modified = np.vectorize(get_color_coded_str)(map)
print_a_ndarray(map_modified)
back_map_modified = np.vectorize(get_color_coded_background)(map)
print("-------------------------------------------------------")
print_a_ndarray(back_map_modified, row_sep="")
PS:打印功能已按照@hpaulj的建议进行修改