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

如何用更少代码将二维NumPy数组垂直分割为新二维数组?

问题:如何用更少代码实现NumPy数组的行列转换,同时降低资源占用?

我编写了一段代码,本质是通过水平分割二维NumPy数组后生成新的二维数组,代码及输出如下:

import numpy as np

array1 = np.asarray([[1, 2, 3]])
array2 = np.asarray([[4, 5, 6]])
array3 = np.asarray([[7, 8, 9]])

concatenated = np.concatenate((array1, array2, array3), axis=0)

print(concatenated)

column_split = np.hsplit(concatenated, array1.size)

td_array = []

for array in column_split:
    td_array.append(array.flatten())

print(np.asarray(td_array))

输出结果:

[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 4 7]
 [2 5 8]
 [3 6 9]]

请问如何用更少的代码实现该功能?我担心应用到大型任务时会占用过多系统资源。


回答

你的核心需求其实是将二维数组的行列进行转置,完全不需要通过hsplit和循环flatten的方式实现,NumPy内置的转置操作就能高效完成,同时大幅减少代码量和资源占用。

优化方案1:合并后直接转置

先合并原始数组,再通过.T属性完成转置,这是最直观的优化方式:

import numpy as np

array1 = np.asarray([[1, 2, 3]])
array2 = np.asarray([[4, 5, 6]])
array3 = np.asarray([[7, 8, 9]])

# 合并数组(用vstack比concatenate更简洁)
concatenated = np.vstack([array1, array2, array3])
# 直接转置得到目标结果
result = concatenated.T

print(concatenated)
print(result)

优化方案2:直接构造数组后转置

如果可以直接构造完整的二维数组,代码会更短:

import numpy as np

# 直接构造原始二维数组
concatenated = np.array([[1,2,3], [4,5,6], [7,8,9]])
result = concatenated.T

print(concatenated)
print(result)

为什么更高效?

  • 避免了hsplit生成多个子数组的内存开销,也省去了循环遍历、flatten和列表转数组的额外计算步骤。
  • NumPy的转置操作是底层优化的视图操作(非特殊情况下不会复制数据),内存占用极低,处理大型数组时性能优势非常明显。

两种方案的输出结果和你原代码完全一致,但代码量减少了一半以上,资源占用大幅降低。

内容的提问来源于stack exchange,提问作者m2022m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:16:02