将字符串分配给numpy.zeros数组

时间:2018-12-14 17:27:57

标签: python arrays numpy

我编写了遍历低分辨率图像的每个像素的代码,并将每个像素的色相,饱和度和亮度级别(HSL)存储在数组中。现在,我想遍历所有这些HSL级别,以确定它最接近哪种颜色,并将此信息存储到一个新数组中。我已经编写了这段代码:

arrayCol = np.zeros((sHeight,sWidth), dtype = str)
for y in range(sHeight):
    for x in range(sWidth):
        #for n in range(3):
        if arrayHSL[y][x][2] <= 10:
            if arrayHSL[y][x][2] <= 10:
                arrayCol[y][x] = 'blk'

print(arrayCol)

,如果亮度低于特定阈值,则将像素分配为“ blk”或“黑色”。但是,在打印和查看数组时,与其在正确的位置显示“ blk”,不如在输出中看到的第一个字母“ b”:

[['' '' '' '' '' 'b' 'b' 'b' 'b' 'b' 'b' 'b' 'b' 'b' '' 'b' '' '' '' '']
 ['' '' '' '' '' '' 'b' 'b' 'b' 'b' '' 'b' 'b' '' '' '' '' '' '' '']
 ['b' '' '' '' '' '' '' '' 'b' 'b' 'b' 'b' 'b' '' '' '' '' '' '' '']
 ['' '' '' '' '' '' '' '' '' 'b' 'b' 'b' '' '' '' '' '' '' '' '']
 ['' '' '' '' '' '' '' '' '' '' 'b' '' '' '' '' '' '' '' '' '']
 ['' '' '' '' '' 'b' '' '' '' '' '' 'b' '' '' '' '' '' '' '' '']
 ['' 'b' '' 'b' '' '' '' '' '' '' 'b' 'b' '' '' '' '' '' '' '' '']
 ['' '' '' 'b' '' 'b' '' '' '' '' '' '' '' 'b' '' '' '' '' '' '']
 ['' '' 'b' '' '' 'b' 'b' 'b' '' '' '' '' '' 'b' '' '' '' '' '' '']
 ['' '' 'b' 'b' '' 'b' '' 'b' '' 'b' 'b' '' 'b' 'b' '' '' '' '' '' '']
 ['b' '' 'b' '' 'b' '' '' '' 'b' 'b' '' 'b' 'b' 'b' '' '' '' 'b' '' '']
 ['b' 'b' 'b' 'b' 'b' 'b' 'b' '' '' '' '' 'b' '' 'b' '' '' '' '' '' '']

将名称“ blk”更改为其他名称(例如“ rlk”)的操作相同,仅显示“ r”。这不是什么大问题,但是一旦我开始实现其他颜色(例如蓝色或棕色),我和Python都将无法区分它们。所以我的问题是如何获取数组来存储颜色的全名,而不仅仅是第一个字母?谢谢

2 个答案:

答案 0 :(得分:0)

如果键入arrayCol.dtype,则应打印dtype('S1'),表示长度为1的字符串。 您可以为固定长度指定dtype='s256'或为任意长度字符串指定dtype=object

arrayCol = np.zeros((sHeight,sWidth), dtype = object)

答案 1 :(得分:0)

这里有一个类似的问题:Weird behaviour initializing a numpy array of string data

您必须将dtype=str替换为dtype='S[number of characters]',对于'blk',其替换为dtype='S3'

根据ArmorK的回答,您还可以将dtype=object用于任意长度的字符串。