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

如何用Pythonic方式从4个一维NumPy数组生成6个2×2二维数组

如何用Pythonic方式从4个一维NumPy数组生成6个2×2二维数组

嘿,这个需求太常见啦!咱们直接用Python/NumPy的原生语法来搞定,既简洁又高效,绝对够Pythonic~ 我给你分几种场景来推荐方法,按需取用就行!

先定义好输入数组(方便后续测试)

首先咱们先把题目里的输入数组准备好:

import numpy as np

Sxx = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
Sxy = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6])
Syx = Sxy  # 题目里说Syx和Sxy相等
Syy = np.array([1.1, 2.1, 3.1, 4.1, 5.1, 6.1])

场景1:生成NumPy 3D数组(6个2×2矩阵,最适合数值计算)

如果后续还要对这些矩阵做数值运算,强烈推荐用NumPy的3D数组,完全不用写循环,效率拉满:

# 第一步:把4个一维数组按列拼接成(6,4)的二维数组
stacked_2d = np.column_stack((Sxx, Sxy, Syx, Syy))
# 第二步:把每一行的4个元素重塑成2×2矩阵,自动得到(6,2,2)的3D数组
S_3d = stacked_2d.reshape(-1, 2, 2)

验证一下:print(S_3d[0]) 会输出:

[[1.  0.1]
 [0.1 1.1]]

完美匹配你要的第一个格式!

另一种等价写法(更紧凑)

如果你喜欢一行搞定,也可以用stack+转置:

S_3d = np.stack((Sxx, Sxy, Syx, Syy)).T.reshape(-1, 2, 2)

场景2:生成Python列表形式的2×2矩阵

如果你更习惯用原生Python列表,列表推导式+zip的组合绝对是Pythonic的代表,可读性拉满:

S_matrix_list = [
    [[sxx, sxy], [syx, syy]] 
    for sxx, sxy, syx, syy in zip(Sxx, Sxy, Syx, Syy)
]

这样得到的S_matrix_list就是一个包含6个2×2列表的大列表,和你要的第二个示例完全一致。


场景3:生成Python列表形式的1×4数组

这个更简单,同样用列表推导式+zip,一行搞定:

S_flat_list = [
    [sxx, sxy, syx, syy] 
    for sxx, sxy, syx, syy in zip(Sxx, Sxy, Syx, Syy)
]

得到的就是你要的扁平子列表形式。


小技巧:利用Syx=Sxy简化代码

因为题目里明确Syx = Sxy,所以咱们可以不用重复传参,直接复用Sxy,让代码更简洁:

# 比如场景1的简化版
S_3d = np.column_stack((Sxx, Sxy, Sxy, Syy)).reshape(-1, 2, 2)
# 场景3的简化版
S_flat_list = [[sxx, sxy, sxy, syy] for sxx, sxy, syy in zip(Sxx, Sxy, Syy)]

怎么样,这些方法应该能完美覆盖你的需求了吧?选哪种主要看你后续的使用场景——如果要做矩阵运算,优先选NumPy 3D数组;如果只是需要简单的数据结构,列表推导式足够直观好用~

备注:内容来源于stack exchange,提问作者squashed.bugaboo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:55:28