我有一个包含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)替换其他两个范围。
有办法做到这一点吗?或者也许创建一个新数组,其中字符串对应于我想要的值范围,实际上用字符串替换值但是创建一个新数组?
答案 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)