使用numpy用不同的字符串替换数组中的整数

时间:2018-06-08 09:50:15

标签: python arrays string numpy

我有一个包含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命令,它将替换所有&gt;的值。 49与我想要的virginica字符串,但它似乎忽略了前两个命令,我想用其各自的字符串(setosa和versicolor)替换其他两个范围。

有办法做到这一点吗?或者也许创建一个新数组,其中字符串对应于我想要的值范围,实际上用字符串替换值但是创建一个新数组?

2 个答案:

答案 0 :(得分:2)

尝试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)

答案 1 :(得分:1)

每次都会覆盖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)