首页 > 解决方案 > 使用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 命令,它将所有大于 49 的值替换为我想要的 virginica 字符串,但它似乎忽略了我想要替换另一个的前两个命令两个范围及其各自的字符串(setosa 和 versicolor)。

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

标签: pythonarraysstringnumpy

解决方案


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

推荐阅读