Python NumPy 无循环按列尾值规则向多维数组追加行元素
NumPy数组条件追加行实现方案
实现思路
- 直接提取
order数组第一列的末尾元素值作为判断依据 - 预定义两种场景对应的追加行,以0/1的取值顺序建立行映射池,通过索引直接匹配对应行,无需分支判断
- 使用
np.vstack完成行的垂直堆叠,全程不使用for循环、不使用列表推导式,符合约束要求
完整实现代码
import numpy as np order = np.array([[ 0, 38846], [ 1, 51599], [ 0, 51599], [ 1, 52598], [ 0, 290480], [ 1, 335368], [ 0, 335916]]) # 获取第一列最后一个元素的取值 last_val = order[-1, 0] # 按取值顺序预定义可追加的行:索引0对应last_val=0的场景,索引1对应last_val=1的场景 append_candidates = np.array([[1, 10000], [2, 20000]]) # 按取值索引取出对应行,保持二维格式以适配堆叠要求 append_row = append_candidates[[last_val]] # 垂直堆叠完成追加 order = np.vstack([order, append_row]) print(order)
场景验证
- 当第一列末尾值为
0(即给定的初始数组场景):输出结果与预期完全匹配
[[ 0 38846] [ 1 51599] [ 0 51599] [ 1 52598] [ 0 290480] [ 1 335368] [ 0 335916] [ 1 10000]]
- 当第一列末尾值为
1(将初始数组最后一行修改为[1, 335916]的场景):输出结果与预期完全匹配
[[ 0 38846] [ 1 51599] [ 0 51599] [ 1 52598] [ 0 290480] [ 1 335368] [ 1 335916] [ 2 20000]]
补充说明
- 映射索引的实现方式可直接拓展,后续如果有更多追加规则,只需按顺序在
append_candidates数组中补充对应行即可 - 若需要修改原数组的内存引用,可使用
np.concatenate配合out参数实现原地修改,无需新建数组
内容的提问来源于stack exchange,提问作者tony selcuk
相关产品推荐
相关产品推荐

