Замена целых чисел в массиве разными строками с использованием numpy - PullRequest
0 голосов
/ 08 июня 2018

У меня есть массив из 75 целочисленных значений, и я пытаюсь заменить значения в массиве строками, если они находятся в определенном диапазоне значений.

Все значения в массиве находятся в диапазоне от 0 до75. Я хочу заменить все значения в диапазоне от 0 до 24 определенной строкой, все значения в диапазоне от 25 до 49 другой строкой и все значения в 50+ третьей строкой.

Я пытаюсь сделать это с помощью numpy,

setosa = 'Iris-setosa '
versicolor = 'Iris-versicolor '
virginica = 'Iris-virginica '
arr_predicted1 = np.array(arr_indices).reshape(1, 75)

arr_predicted2 = np.where(arr_predicted1 < 25, setosa, arr_predicted1)
arr_predicted2 = np.where((arr_predicted1 > 24) & (arr_predicted1 < 50), 
versicolor, arr_predicted1)
arr_predicted2 = np.where(arr_predicted1 > 49, virginica, arr_predicted1)

Проблема, с которой я сталкиваюсь, заключается в том, что она выполняет только третью команду np.where, где она заменяет все значения, которые>49 со строкой virginica, как я хотел, но, похоже, игнорируются две предыдущие команды, в которых я хочу заменить два других диапазона соответствующими строками (setosa и versicolor).

Есть ли способ сделать это?Или, может быть, создать новый массив, где строки соответствуют диапазонам значений, которые я хочу, по существу, заменить значения на строки, но создать новый массив?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

попробуй numpy.select:

import numpy as np

conditions = [arr_predicted1 < 25, (arr_predicted1 > 24) & (arr_predicted1 < 50), arr_predicted1 > 49]
choice = [setosa, versicolor, virginica]


arr_predicted2 = np.select(condtions, choice)
0 голосов
/ 08 июня 2018

Вы перезаписываете arr_predicted2 каждый раз, поэтому он выполняет только последний:

setosa = 'Iris-setosa '
versicolor = 'Iris-versicolor '
virginica = 'Iris-virginica '
arr_predicted1 = np.array(arr_indices).reshape(1, 75)

arr_predicted2 = np.where(arr_predicted1 < 25, setosa, arr_predicted1)
arr_predicted3 = np.where((arr_predicted2 > 24) & (arr_predicted2 < 50), 
    versicolor, arr_predicted2)
arr_predicted4 = np.where(arr_predicted3 > 49, virginica, arr_predicted3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...