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

如何高效创建几十万条数据的(n,786)维度2D NumPy数组?

嘿,这个问题我太熟了!处理几十万条数据的时候,千万别用Python层面的循环一条一条填充,那速度能慢到让你怀疑人生。下面给你几个高效的解决方案,亲测好用:

方案1:直接用np.array()提取嵌入(最推荐)

你的元组列表里每个元素的第二个值就是786维的嵌入,直接用列表推导式把所有嵌入抽出来,再转成NumPy数组就行。这个方法的核心是利用列表推导式的高效性,加上NumPy底层C实现的数组转换,速度非常快。

代码示例:

import numpy as np

# 假设你的元组列表叫 sentence_embeddings_list
embeddings_array = np.array([emb for _, emb in sentence_embeddings_list])

如果想进一步节省内存,可以指定数据类型(比如嵌入是float32的话):

embeddings_array = np.array([emb for _, emb in sentence_embeddings_list], dtype=np.float32)
方案2:用np.vstack()(适合嵌入已经是NumPy数组的情况)

如果每个sentence_embedding_n本身已经是1D NumPy数组,那用np.vstack()拼接也很高效:

embeddings_array = np.vstack([emb for _, emb in sentence_embeddings_list])

不过如果你的嵌入是普通列表,方案1的np.array()会更直接,因为vstack内部也要做类似的类型转换。

方案3:预分配数组(极端大数量场景备用)

如果数据量突破百万级,担心列表推导式占用过多临时内存,可以先预分配好数组,再批量填充(不过几十万的话其实方案1完全足够):

n = len(sentence_embeddings_list)
# 提前指定形状和数据类型,减少内存波动
embeddings_array = np.empty((n, 786), dtype=np.float32)

# 这里的循环虽然是Python层面,但因为只是赋值操作,比逐个append快很多
for idx, (_, emb) in enumerate(sentence_embeddings_list):
    embeddings_array[idx] = emb
额外提醒
  • 确保所有嵌入的数据类型一致,不然NumPy会自动升级到更高精度的类型(比如float64),平白浪费内存。
  • 几十万条786维的float32数组,内存占用大概是 100000 * 786 * 4 ≈ 314MB,现代机器完全hold住,不用怕内存不够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:26:21