Как изменить / переназначить значения int на str в numpy - PullRequest
0 голосов
/ 05 апреля 2019


У меня есть двумерный массив int в numpy.Я строю своего рода генератор изображений ASCI на основе шрифтов TrueType.У меня есть проблема, что я хочу изменить все значения в определенном диапазоне в строку.Когда я изменяю одно значение на строковое, остальные разбиваются, потому что для такой замены требуется 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 ]

2 голосов
/ 05 апреля 2019

Вот что @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 голос
/ 05 апреля 2019

Я решил эту проблему, изменив значения, прежде чем перевести его в 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

1 голос
/ 05 апреля 2019

Два шага:

  1. Выполнить замену строки последняя , а не первая
  2. Изменить только нужный диапазон: указать верхний и нижний пределы.В опубликованной последовательности у вас не будет 0.75 значений.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...