从列表中追加的Numpy

2024-05-17 08:46:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个任务,其中我必须将列表中的名称映射到数组中的特定整数(希望我正确使用了术语)。我写了这段代码,但它不起作用。为什么会这样,我如何才能让它工作

list_1 = ['sentosa', 'versicolor', 'virginica', 'virginica', 'sentosa']
beta = np.array([])
for x in list_1:
  if x == "sentosa":
    np.append(beta, [1], axis = 0)
  elif x == "versicolor":
    np.append(beta, [2], axis = 0)
  elif x == "virginica":
    np.append(beta, [3], axis = 0)

Tags: 代码名称列表np整数数组listbeta
3条回答

要将字符串列表映射到唯一整数,必须首先找到唯一字符串,然后将字符串1-1映射到原始字符串列表中的整数

list_1 = ['sentosa', 'versicolor', 'virginica', 'virginica', 'sentosa']

# create unique list of  names
unique_list = set(list_1) # Unique list {'sentosa', 'versicolor', 'virginica'}

# create mappings from names to integer (id)
string_to_integer = {name: idx+1 for idx, name in enumerate(unique_list)}

# map initial list of names to ids
k = [string_to_integer [name] for name in list_1 ]

输出:

3, 2, 1, 1, 3

另一种可能的方式-

list_1 = ['sentosa', 'versicolor', 'virginica', 'virginica', 'sentosa']

mydict={}
i = 0
for item in list_1:
    if(i>0 and item in mydict):
        continue
    else:    
       i = i+1
       mydict[item] = i

k=[]

for item in list_1:
    k.append(mydict[item])
1, 2, 3, 3, 1

然后切换到numpy array

arr = numpy.asarray(k) 

我希望这能帮助你完成任务

NumPy数组的大小是固定的,它们实际上不可追加。即使修复了bug,您所做的工作也会非常缓慢。改为使用普通列表,必要时在末尾将其转换为NumPy数组

如何修复代码

^{}不在适当位置,因此您需要重新分配输出:

list_1 = ['sentosa', 'versicolor', 'virginica', 'virginica', 'sentosa']
beta = np.array([])
for x in list_1:
    if x == "sentosa":
        beta = np.append(beta, [1], axis = 0)
    elif x == "versicolor":
        beta = np.append(beta, [2], axis = 0)
    elif x == "virginica":
        beta = np.append(beta, [3], axis = 0)

如何高效地做自己想做的事

您可以使用^{}return_inverse=True选项来分解数据:

np.unique(list_1, return_inverse=True)[1]+1

输出:array([1, 2, 3, 3, 1])

相关问题 更多 >