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

如何在Numba中向列表追加字符串、整型、浮点型混合类型数据?

问题原因

Numba的nopython模式要求List中所有元素的类型必须完全一致,你尝试追加的列表同时包含整型、字符串、浮点型三类异构数据,Numba无法自动推断出统一的元素类型,因此触发TypingError。

解决方案

方案1:拆分存储+外部拼接(推荐,实现最简单,性能损失可忽略)

耗时最高的相似度矩阵遍历逻辑已经由Numba加速完成,你可以先在Numba函数内仅存储可被类型识别的数值类结果,返回Python普通环境后再匹配对应的文本内容即可:

import numba
from numba.typed import List
import numpy as np

@numba.jit(nopython=True)
def similarity(nid, cos_sim, threshold):
  numba_list = List()
  for i in range(cos_sim.shape[0]):
    for index in range(i, cos_sim.shape[1]):
      if cos_sim[i][index] > threshold and i != index:
        # 仅存可被类型推断的ID、相似度数值
        numba_list.append((nid[i], nid[index], cos_sim[i][index]))
  return numba_list

# 调用函数获取数值结果
res_num = similarity(idd, cos_sim, 0.85)

# 在Python环境中拼接文本,生成你需要的最终格式
# 先做ID到文本的映射字典,加速匹配
id_to_txt = dict(zip(idd, txt))
final_res = []
for src_id, dst_id, score in res_num:
  final_res.append([src_id, id_to_txt[src_id], dst_id, id_to_txt[dst_id], score])
print(final_res)

方案2:预定义异构结构(适合必须在Numba内部完成全流程的场景)

你可以提前通过numba.experimental.structref定义固定字段类型的结构体,让Numba可以提前推断元素类型,即可在List中存储混合类型的结构:

from numba import types
from numba.experimental import structref

# 定义结构体字段类型
@structref
class SimilarPair(types.StructRef):
  def __init__(self, src_id, src_txt, dst_id, dst_txt, score):
    pass

# 定义字段对应的类型
fields = [
  ('src_id', types.int64),
  ('src_txt', types.unicode_type),
  ('dst_id', types.int64),
  ('dst_txt', types.unicode_type),
  ('score', types.float32)
]
StructType = structref.define_proxy(SimilarPair, fields)

@numba.jit(nopython=True)
def similarity(nid, txxt, cos_sim, threshold):
  numba_list = List()
  for i in range(cos_sim.shape[0]):
    for index in range(i, cos_sim.shape[1]):
      if cos_sim[i][index] > threshold and i != index:
        # 用预定义的结构体存混合类型数据
        pair = StructType(nid[i], txxt[i], nid[index], txxt[index], cos_sim[i][index])
        numba_list.append(pair)
  return numba_list

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 22:27:01