首页 > 解决方案 > 在某些索引中更改 numpy.array 中的字符串值

问题描述

我需要为另一个数组中的每个值创建一个字符串数组,实际上它是颜色值。逻辑是正值应该是一种颜色,负值应该是另一种颜色。

我试过这个代码片段:

values = np.array([1, 2, -3, 4, 5])
color_values = np.array(['rgb(74,159,234)'] * len(values))
color_values[values < 0] = 'rgb(120,183,239)'
print(color_values)

但问题是新的字符串值被截断为数组中先前值的长度,所以结果是:

['rgb(74,159,234)', 'rgb(74,159,234)', 'rgb(120,183,239', 'rgb(74,159,234)', 'rgb(74,159,234)']

第三个值已更改,但没有最后一个括号。我可以重写代码以实现我需要的结果,但现在我很好奇为什么会发生这种情况。

我正在使用Python 3.6numpy 1.14.2

标签: pythonnumpy

解决方案


根据这个答案, strnumpy数组具有固定长度。他们建议在声明数组时指定数据类型。

您可以在声明数组时尝试添加数据类型;将其设置为 16 个字符(或更多)。

color_values = np.array(['rgb(74,159,234)'] * len(values), dtype='S16')

其余的行不需要修改。


推荐阅读