如何使用numpy根据数组a的索引将数组b对应位置设为1?
高效实现数组索引替换的方法
如果用Python实现,推荐用numpy的向量化操作,完全不需要显式暴力遍历,底层由C优化执行,效率远高于原生列表循环。
实现步骤与代码:
- 将原生列表转换为numpy数组,利用numpy的批量索引能力
- 生成匹配的维度索引,直接对目标位置赋值为1
- 如需转回原生列表,调用
.tolist()方法即可
import numpy as np # 原始数组 a = [[1, 2]] b = [[[0,0,0],[0,0,0]]] # 转为numpy数组 np_a = np.array(a) np_b = np.array(b) # 生成行索引:对应b的第二维度元素位置 row_indices = np.arange(np_a.shape[1]) # 批量定位并赋值 np_b[0, row_indices, np_a[0]] = 1 # 转回原生列表(可选) r = np_b.tolist() print(r) # 输出:[[[0, 1, 0], [0, 0, 1]]]
原理说明:
numpy的索引是向量化的,np_b[0, row_indices, np_a[0]]会一次性定位到b[0][0][1]和b[0][1][2]这两个目标位置,直接完成赋值操作,全程没有Python层面的循环,数据量越大,效率优势越明显。
内容的提问来源于stack exchange,提问作者Amand Seyfru
相关产品推荐
相关产品推荐

