gpt4 book ai didi

python - numpy 数组的 numpy 数组 numpy 数组的

转载 作者:行者123 更新时间:2023-12-01 05:30:54 33 4
gpt4 key购买 nike

我有一个大小为 (2x3) 的 numpy 对象数组。我们称之为M1。在M1中有6个numpy数组。M1 给定行中的数组形状相同,但与 M1 任何其他行中的数组形状不同。

也就是说,

M1 = [ [A1 B1 C1]
[D1 E1 F1] ]

A1、B1、C1、D1、E1、F1 是 2D numpy 数组。 A1、B1、C1的形状相同。 D1、E1、F1的形状相同。 A1 != D1 的形状等等。

我也有类似的情况

M2 = [ [A2 B2 C2]
[D2 E2 F2] ]

现在我想要一个与 M1 形状相同的 numpy 数组 M3。

M3 = [ [A3 B3 C3]
[D3 E3 F3] ]

其中A3[0,0] = [A1[0,0] A2[0,0]]A3[0,1] = [A1[0,1] A2[0,1]] 等等。 (M3的所有元素都会这样)

有没有一种Python式的方法可以在不使用for循环的情况下做到这一点?

另外,我想知道如果我想要 A3[0,0] 为:

A3[0,0] = [ [A1[0,0] A2[0,0]],
[B1[0,0] B2[0,0]] ]

最佳答案

你不可能得到你想要的一切。您想要使用 numpy 数组的优化(即,您想要避免 for 循环),但您希望能够灵活地让 M1 和 M2 的每一行具有不同的形状。但在这种情况下,效率需要牺牲灵 active 。

只需将 M1 和 M2 分解为不同的变量,每一行一个变量。将这些称为 M1a 和 M2a、M1b 和 M2b,...现在您可以创建真正的 3d numpy 数组。

# building blocks ... like your A1, B1, etc
I2 = np.eye(2, dtype=np.int)

# First row of M1
M1a = np.array([I2, 2*I2, 3*I2])

# First row of M2
M2a = -M1a.copy()

# Stick them together such that M3a[0,0] = [M1a[0,0], M2a[0,0]]
M3a = np.transpose([M1a, M2a])

现在使用不同形状的构建 block 对 M1b、M2b、M3b 行执行相同操作I3 = np.eye(3)。因此,您仅在最后一个维度上有一个 for 循环。

我知道,您想要矢量化最后一个维度。但如果您想保持每行使用不同形状的灵 active ,这是不可能的。对不起!天下没有免费的午餐。

关于python - numpy 数组的 numpy 数组 numpy 数组的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20329927/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com