You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Numpy从列表映射值追加到数组时代码不生效的原因及解决方法

问题核心原因

  • np.append() 并非原地修改方法,调用后仅会返回拼接后的新数组,不会修改原数组对象。你的代码没有将np.append()的返回值赋值回beta,因此beta始终保持初始空数组的状态。
  • 循环逐个追加元素的写法性能极低,不适用于Numpy数组操作场景。

最小改动修复方案

仅需将每次np.append()的结果赋值回beta即可运行,如需整数类型可在初始化时指定dtype:

import numpy as np
list_1 = ['sentosa', 'versicolor', 'virginica', 'virginica', 'sentosa']
beta = np.array([], dtype=int)
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)

运行后beta结果为array([1, 2, 3, 3, 1])。

更高效的推荐实现

无需编写循环,使用字典映射配合向量化操作即可,代码更简洁、性能更高:

import numpy as np
list_1 = ['sentosa', 'versicolor', 'virginica', 'virginica', 'sentosa']
map_rule = {'sentosa':1, 'versicolor':2, 'virginica':3}
beta = np.vectorize(map_rule.get)(list_1)

如果你不需要手动指定映射值,希望自动为每个不同的名称分配唯一整数编码,可以使用np.unique的return_inverse参数:

import numpy as np
list_1 = ['sentosa', 'versicolor', 'virginica', 'virginica', 'sentosa']
# 得到的mapping是从0开始的整数编码,需要从1开始的话直接加1即可
_, mapping = np.unique(list_1, return_inverse=True)
beta = mapping + 1

内容的提问来源于stack exchange,提问作者Amateur1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:15:04