Numpy如何基于指定索引将数组部分内容替换为另一完整数组
解决方案
直接使用Numpy的花式索引特性,一行代码即可完成赋值,完全避免Python层的循环,底层由C实现,处理大数组时效率远高于你现有的循环写法:
A[index_list] = B
原理说明
Numpy支持将整数列表作为数组索引,传入A[index_list]时会按index_list的顺序依次选取A的axis=0维度对应位置的子数组,刚好和B的axis=0维度的元素顺序一一对应,赋值时会自动对齐后续维度的形状,完全符合你的需求。
完整验证代码
import numpy as np # 初始化数组 A = np.arange(12).reshape(3,2,2) B = np.array([ [[10, 10], [10, 10]], [[20, 20], [20, 20]] ]) index_list = [0,2] # 执行赋值 A[index_list] = B # 打印结果 print(A)
运行后输出和你期望的结果完全一致:
array([[[10, 10], [10, 10]], [[ 4, 5], [ 6, 7]], [[20, 20], [20, 20]]])
注意事项
需要保证index_list的长度和B的第0维长度完全一致,否则会触发形状不匹配的报错,这和你原有逻辑的前提条件一致。
内容的提问来源于stack exchange,提问作者Chen
相关产品推荐
相关产品推荐

