如何无需for循环自动构造指定结构的numpy数组U?
高效实现numpy数组批量赋值方案
直接利用numpy的广播机制就能实现单行命令完成批量赋值,完全避免循环,适合大数据量场景:
import numpy as np x = np.ones([5,4], int) U = np.empty([5,2,4]) # 核心单行赋值代码 U[:] = x[:, None, :] * np.array([2,4])[None, :, None]
原理说明:
x[:, None, :]将原数组x的形状从(5,4)扩展为(5,1,4),为中间新增的维度(对应U的第二个维度)预留位置。np.array([2,4])[None, :, None]将乘数数组的形状调整为(1,2,1),通过numpy的广播规则,它会自动匹配x扩展后的形状,最终生成(5,2,4)的结果数组,直接覆盖赋值给U即可。
这种方式完全基于numpy的向量化操作,内存和计算效率都远高于循环实现。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

