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

Python中如何用Fancy Indexing为NumPy数组行填充指定长度的1?

解决NumPy按行指定长度填充元素的问题

你遇到的错误是因为切片的右端无法直接传入数组类型的limits,NumPy不支持这种索引方式。以下是两种无需循环的高效解决方案:

方法一:广播生成布尔掩码(推荐)

通过列索引数组与limits广播比较,生成布尔掩码后批量赋值:

import numpy as np

a = np.zeros((3,20))
limits = np.array([5, 10, 15])

# 生成0到19的列索引,形状为(1,20)
col_indices = np.arange(20)
# 将limits转为(3,1)形状,与col_indices广播得到(3,20)的布尔矩阵
mask = col_indices < limits[:, np.newaxis]
# 利用掩码为对应位置赋值
a[mask] = 1

limits[:, np.newaxis]将一维的limits转换为列向量,触发广播机制后,每个行的limit值会和所有列索引比较,最终得到的掩码矩阵精准标记出每行需要设为1的位置。

方法二:使用np.put_along批量赋值

构造每行的有效列索引,通过np.put_along沿轴赋值:

import numpy as np

a = np.zeros((3,20))
limits = np.array([5, 10, 15])

# 生成行索引的列向量,形状(3,1)
row_indices = np.arange(3)[:, np.newaxis]
# 生成列索引数组,形状(1,20)
col_indices = np.arange(20)
# 筛选出每行limit以内的列索引
valid_mask = col_indices < limits[:, np.newaxis]
# 仅对有效位置赋值1
np.put_along(a, col_indices * valid_mask, 1, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:33:14