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

numpy.delete删除随机采样数组元素后长度异常问题

问题原因

核心bug出在np.random.choice的默认采样逻辑:

  • 该函数默认使用有放回采样,你没有显式指定replace=False,因此生成的索引数组ints1存在大量重复值
  • 当向np.delete传入包含重复值的索引数组时,同一个行位置只会被删除一次,不会因为索引重复出现就多次删除同一行,最终实际删除的行数远小于你预期的10%
  • 数值校验:预期删除150298行,实际删除行数为1502983 - 1359941 = 143042行,差值7256就是重复索引导致的少删行数
  • 额外隐患:你对两个数组复用了同一组采样索引ints1,如果x_2g长度和x_1g不一致,会直接触发索引越界报错。
修复代码

采样时显式开启无放回模式,两个数组分别生成独立的采样索引,删除后交叉拼接即可保证形状和原数组完全一致:

import numpy as np

# 处理第一个数组的10%采样
n1 = x_1g.shape[0]
sample_num1 = round(n1 * 0.1)
# 无放回采样保证索引唯一,无重复
swap_idx1 = np.random.choice(n1, sample_num1, replace=False)
x1_swap_part = x_1g[swap_idx1, :]
x1_remain = np.delete(x_1g, swap_idx1, axis=0)

# 处理第二个数组的10%采样
n2 = x_2g.shape[0]
sample_num2 = round(n2 * 0.1)
swap_idx2 = np.random.choice(n2, sample_num2, replace=False)
x2_swap_part = x_2g[swap_idx2, :]
x2_remain = np.delete(x_2g, swap_idx2, axis=0)

# 交叉拼接得到最终数组,形状与原数组完全一致
x_1g_new = np.vstack([x1_remain, x2_swap_part])
x_2g_new = np.vstack([x2_remain, x1_swap_part])

校验提示:执行完成后打印形状,x_1g_new.shape与原x_1g.shape完全相等,x_2g_new.shape与原x_2g.shape完全相等,两个数组各包含10%来自对方的样本数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:48:19