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

多帧numpy数组按不同坐标切片赋值报错:TypeError索引问题

解决numpy多帧按不同坐标切片赋值的报错问题

嘿,我来帮你搞定这个报错!你遇到的TypeError: only integer scalar arrays can be converted to a scalar index,本质原因是numpy的切片语法(start:end)只认单个整数标量当起始/结束值,但你这里传的slice_yyxx[:,0]是个长度为5的数组(对应每帧的y1),切片没法同时处理每帧不同的范围——毕竟切片是给整个维度设置统一的区间,而你需要给每帧单独划不同的区域,自然就报错了。

两种可行的解决方案

方法1:循环遍历(简单直观,小数据首选)

既然每帧的切片范围都是独立的,直接循环每帧逐个赋值就好,代码一看就懂,对于5帧这种小体量完全够用:

for i in range(nbr_frame):
    y1, y2, x1, x2 = slice_yyxx[i]
    multiple_frames[i, y1:y2, x1:x2] = 1

方法2:向量化索引(高效处理大规模数据)

如果你的帧数特别多,不想用循环拖慢速度,可以用向量化的方式生成所有需要赋值的坐标点,一次性完成操作:

# 生成每个切片对应的帧索引,重复对应切片的高度次数
frame_idx = np.concatenate([np.full(y2 - y1, i) for i, (y1, y2, _, _) in enumerate(slice_yyxx)])
# 生成所有切片内的y坐标
y_idx = np.concatenate([np.arange(y1, y2) for y1, y2 in slice_yyxx[:, :2]])
# 生成所有切片内的x坐标,每个y对应的x范围重复y的次数
x_idx = np.concatenate([np.tile(np.arange(x1, x2), y2 - y1) for y1, y2, x1, x2 in slice_yyxx])

# 一次性赋值
multiple_frames[frame_idx, y_idx, x_idx] = 1

这种方式通过预先计算所有要赋值的位置索引,避免了循环开销,适合处理成百上千帧的大数据场景。

不管用哪种方法,最终都能实现你想要的效果:给每帧对应的[y1,y2,x1,x2]区域全部赋值为1~

内容的提问来源于stack exchange,提问作者Timothée Dautrême

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:22:52