如何高效简化从(m,k)型NumPy数组生成(1,n)型数组的代码?
优化方案
针对你需要从(5,n)数组A构建(1,20)数组B的需求,可以利用NumPy的矢量化操作简化代码,避免逐段赋值:
方法1:切片+重塑(最简洁)
直接提取A每一行的前4个元素,然后重塑成目标形状:
import numpy as np A = np.array( [[4, 2, 1, 4, 0, 1, 3, 2, 4, 4], [4, 2, 0, 3, 1, 1, 4, 2, 2, 1], [3, 2, 3, 2, 0, 3, 4, 1, 4, 3], [1, 1, 1, 3, 1, 1, 3, 0, 2, 2], [3, 3, 4, 1, 4, 1, 0, 1, 0, 2]]) B = A[:, :4].reshape(1, -1)
A[:, :4]提取所有行的前4个元素,得到一个(5,4)的数组;reshape(1, -1)自动计算列数,将其转换为(1,20)的二维数组。
方法2:扁平化+升维
先扁平化提取后的数组,再通过索引增加维度:
B = A[:, :4].flatten()[None, :]
flatten()将(5,4)数组转为一维数组,[None, :]将其升为(1,20)的二维数组。
方法3:数组拼接
用concatenate拼接每一行的前4个元素:
B = np.concatenate(A[:, :4], axis=0)[None, :]
np.concatenate(A[:, :4], axis=0)将5个(4,)的一维数组拼接成(20,)的数组,再升维为(1,20)。
验证结果
以上方法得到的B数组均与你原代码的输出一致:
array([[4., 2., 1., 4., 4., 2., 0., 3., 3., 2., 3., 2., 1., 1., 1., 3., 3., 3., 4., 1.]])
这些方案无需编写重复的赋值语句,且NumPy的内置操作是矢量化执行的,在处理大型数组时比逐段赋值效率更高。
内容的提问来源于stack exchange,提问作者Sadcow
相关产品推荐
相关产品推荐

