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

如何通过二维数组索引为Numpy数组赋值(非迭代实现)

用Numpy高级索引实现无循环的数组赋值(Pythonic方案)

这事儿用Numpy的高级索引就能完美解决,完全不用写循环,既符合Pythonic的简洁风格,又能发挥Numpy的矢量运算效率。

先把你的示例环境搭好:

import numpy as np
import itertools

p = 4
combos = np.asarray(list(itertools.combinations(range(p), 3)))
subbins = np.zeros(shape=(len(combos), p), dtype=int)  # 指定int类型,避免默认浮点数

核心实现(一行代码搞定)

直接用Numpy的广播式索引来赋值:

subbins[np.arange(len(combos))[:, None], combos] = 1

代码逻辑解释

  • np.arange(len(combos))生成行索引数组[0,1,2,3],加上[:, None]是把它转换成列向量(形状变成(4,1)),这样就能和combos的(4,3)形状匹配,实现每行对应每行的列索引。
  • 这种索引方式会让Numpy自动把行索引和列索引一一对应,给subbins[i, combos[i]]的所有位置都赋值为1,正好满足你的需求。

运行后打印subbins就能得到你要的结果:

print(subbins)
# 输出:
# [[1 1 1 0]
#  [1 1 0 1]
#  [1 0 1 1]
#  [0 1 1 1]]

另一种简洁写法:用np.put_along

如果你觉得索引写法有点绕,也可以用Numpy专门提供的put_along函数,语义更直观:

np.put_along(subbins, combos, 1, axis=1)

这个函数的作用就是沿着指定轴(这里是列轴axis=1),把每个行里对应combos索引的位置替换成1,效果和上面的索引写法完全一致。

内容的提问来源于stack exchange,提问作者Dr. Andrew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:42:35