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

如何提取二维数组中出现占比不低于1%的元素?求实现方案

提取二维数组中出现占比≥1%的元素

输入数据

我有一个名为data的二维数组,内容如下:

data = [
    ['amazon', 'phone', 'serious', 'mind', 'blown', 'serious', 'enjoy', 'use', 'applic', 'full', 'blown', 'websit', 'allow', 'quick', 'track', 'packag', 'descript', 'say'],
    ['would', 'say', 'app', 'real', 'thing', 'show', 'ghost', 'said', 'quot', 'orang', 'quot', 'ware', 'orang', 'cloth', 'app', 'adiquit', 'would', 'recsmend', 'want', 'talk', 'ghost'],
    ['love', 'play', 'backgammonthi', 'game', 'offer', 'varieti', 'difficulti', 'make', 'perfect', 'beginn', 'season', 'player']
]

需求

将该数组中**出现占比至少1%**的元素保存到列表中。

尝试过的无效代码

使用numpy_indexed的实现代码(未得到预期结果):

import numpy as np
import numpy_indexed as npi

# 原代码中tokens_list_train对应此处的data
idx = [np.ones(len(a))*i for i, a in enumerate(data)]
(rows, cols), table = npi.count_table(np.concatenate(idx), np.concatenate(data))
table = table / table.sum(axis=1, keepdims=True)
print(table * 100)

问题分析

原代码错误地按每行计算元素占比,而需求是计算元素在整个数组中的全局占比,因此逻辑方向不符。


可行实现方案

方案1:原生Python(collections.Counter)

适合小规模数据,代码简洁直观:

from collections import Counter
import itertools

# 展平二维数组为一维列表
all_tokens = list(itertools.chain.from_iterable(data))
total_count = len(all_tokens)

# 统计每个元素的出现次数
token_counter = Counter(all_tokens)

# 筛选占比≥1%的元素
min_ratio = 0.01
result = [token for token, cnt in token_counter.items() if cnt / total_count >= min_ratio]

print(result)

方案2:Numpy实现

适合大规模数据,计算效率更高:

import numpy as np

# 展平数组
flat_data = np.concatenate(data)
# 获取唯一元素及对应出现次数
unique_tokens, counts = np.unique(flat_data, return_counts=True)

# 计算总元素数并筛选符合条件的元素
total = flat_data.size
min_ratio = 0.01
result = unique_tokens[counts / total >= min_ratio].tolist()

print(result)

方案3:修正后的numpy_indexed实现

调整原代码逻辑为全局统计:

import numpy as np
import numpy_indexed as npi

# 展平数组
flat_data = np.concatenate(data)
# 全局统计元素出现次数
unique_tokens, counts = npi.count(flat_data)

# 筛选占比≥1%的元素
total = flat_data.size
min_ratio = 0.01
result = unique_tokens[counts / total >= min_ratio].tolist()

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:10:24