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

如何正确计算numpy数组每16元素分组的众数实现多数投票

问题说明

现有需求为对CSV文件存储的大型NumPy数组做分块众数计算:

  • 每16个连续元素为一个分组
  • 末尾不足16个元素的剩余分组同样执行多数投票求众数
  • 所有分组的众数结果需存入新文件

原有代码无法实现预期效果的核心问题:

  • 未将CSV读取到的字符串内容转换为数值格式,直接传入NumPy/SciPy计算函数会触发类型错误
  • 未实现16元素步长的分块逻辑
  • 循环逻辑错误:逐行遍历CSV时直接将整个csv.reader对象传入np.unique,无法得到正确的元素统计结果
  • 缺少计算结果写入新文件的逻辑
可直接运行的实现代码
import csv
import numpy as np
from scipy.stats import mode

# 固定配置
BLOCK_SIZE = 16
INPUT_PATH = "prediction-pairs-overall.csv"
OUTPUT_PATH = "block_mode_results.csv"

# 读取CSV数据转为一维数值数组
all_values = []
with open(INPUT_PATH, "r", newline="") as infile:
    reader = csv.reader(infile, delimiter=",")
    for row in reader:
        # 若你的数据为浮点型,将下方int替换为float即可
        all_values.extend([int(cell) for cell in row])
all_values = np.array(all_values)

block_modes = []
# 逐块切片计算众数
for pos in range(0, len(all_values), BLOCK_SIZE):
    current_block = all_values[pos : pos + BLOCK_SIZE]
    # 取当前块众数值
    mode_res = mode(current_block, keepdims=False).mode
    block_modes.append(mode_res)

# 结果写入新CSV
with open(OUTPUT_PATH, "w", newline="") as outfile:
    writer = csv.writer(outfile)
    for val in block_modes:
        writer.writerow([val])
关键逻辑说明
  • 采用固定步长切片的方式做分块,不需要额外判断末尾剩余元素长度,不足16个元素的尾部块会被自动切出单独计算
  • 读取CSV时统一做类型转换,避免字符串类型导致的统计错误
  • 调用mode时传入keepdims=False,适配SciPy 1.9及以上版本的接口规则,避免返回维度异常
  • 结果默认每行存一个众数值,可根据自身需求调整写入格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:18:26