为Matrix / 2D-numpy数组中的条目着色?

时间:2019-06-07 14:56:35

标签: arrays python-3.x numpy matrix colors

我正在学习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,然后根据条件将具有特定背景颜色的值附加到新矩阵中,但我认为有一种更优雅的方法可以做到这一点...

1 个答案:

答案 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]))
>>> 

enter image description here

要添加背景色,请使用fn

>>> def get_color_coded_str(i):
...    return "\033[4{}m{}\033[0m".format(i+1, i)

enter image description here

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的建议进行修改