如何将int值更改/重新映射为numpy中的str

时间:2019-04-04 21:11:15

标签: python python-3.x numpy


我在numpy中有一个int的二维数组。我正在建立一种基于TrueType字体的ASCI艺术生成器。我有一个问题,我想将一定范围内的所有值更改为字符串。当我确实将一个值更改为字符串时,其余的将中断,因为整个数组中的int是此类替换所必需的。请,如何重新映射数组中的多个范围?谢谢

data = np.array(list(image.getdata()), dtype=object).reshape(30, 30)
n = 255
data[data > n*0.75] = 'a'
data[data > n*0.5] = 0.75
data[data > n*0.25] = 0.5
data[data > 1] = 0.25

3 个答案:

答案 0 :(得分:2)

这是@Prune的意思:

data[(n*0.5 <= data) & (data < n*0.75)] = 0.75
data[(n*0.25 <= data) & (data < n*0.5)] = 0.5 
data[(data < n*0.25)] = 0.25
data[data > 0.75] = "A"

答案 1 :(得分:1)

两个步骤:

  1. 执行字符串替换 last ,而不是first
  2. 仅更改所需的范围:同时给出上限和下限。按照您发布的顺序,您将没有0.75值。

答案 2 :(得分:1)

我通过更改值来解决此问题,然后将其变为Numpy Array

感谢@hpaulj

def number_to_letter(number):
    n = 255
    if number >= 255*0.75:
        return '#'
    elif number >= 255*0.5:
        return 'O'
    elif number >= 255*0.25:
        return '+'
    elif number >= 1:
        return '-'
    elif number >= 0:
        return ' '

image_data = [number_to_letter(number) for number in image_data]
data = np.array(image_data, dtype=str).reshape(30, 30)

enter image description here