【问题标题】:How to substitute numbers of a numpy array with strings of a list in python如何用python中的列表字符串替换numpy数组的数字
【发布时间】:2021-06-02 08:05:04
【问题描述】:

我有一个 numpy 数组,想用一些字符串替换它的值。我检查了this solution,但无法解决我的问题。我的字符串在一个列表中:

names=['base', 'middle', 'top']

我的列表有三个字符串,这意味着我的数组中还有三个数字:

import numpy as np
numbers=np.array([[3., 1., 2., 2.], [1., 2., 3., 1.]])

为了用数字映射名字,我有这样的逻辑:从第一个名字到最后一个名字,数字会减少。我的意思是名字匹配最高的数字('base' : 3.),第二大的名字('middle' : 2.)和姓等于最低的数字('top' : 1.)。最后我想让我的数组为:

subs_arr= np.array([['base', 'top', 'middle', 'middle'], ['top', 'middle', 'base', 'top']])

有什么方法可以在 python 中自动完成(不需要将名称与数字映射)?我非常感谢您提前提供的任何帮助。

【问题讨论】:

  • subs_arr = np.array(names)[(numbers-1).astype(np.int)] 其中numbers 应以 0 开头,因为 python 索引以 0 开头。但是此解决方案与您的链接中建议的解决方案相同,因此我投票结束此问题.
  • 亲爱的@obchardon,感谢您的帮助。老实说,在阅读了该解决方案后,我仍然无法弄清楚我的问题。

标签: python arrays list numpy


【解决方案1】:

这样的事情怎么样:

import numpy as np
numbers = np.array([[3., 1., 2., 2.], [1., 2., 3., 1.]]).astype(int)-1
names = np.array(['top', 'middle', 'base'])

subs_arr = names[numbers]

输出:

subs_arr = 
[['base' 'top' 'middle' 'middle']
 ['top' 'middle' 'base' 'top']]

【讨论】:

  • 亲爱的@yan ziselman,也许用 np.min(numbers) 替换 1 效果更好,不是吗?
  • 这取决于用例以及如何形成数组“数字”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 2021-06-17
相关资源
最近更新 更多