【问题标题】:numpy array of numpy arrays of numpy arraysnumpy 数组 numpy 数组 numpy 数组
【发布时间】:2013-12-02 13:52:11
【问题描述】:

我有一个大小为 (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 的形状相同。 Shape of 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的所有元素都会这样)

有没有不使用 for 循环的 Pythonic 方法?

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

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

【问题讨论】:

  • 有什么告诉我你正在使用张量?
  • 那么,A3.ndim 在第一种情况下是3,在第二种情况下是4?我认为您将无法使用 object 数组对此类事情进行矢量化 - 至少我不知道该怎么做:P
  • 当每个元素都包含来自M1 和 M2的对元素时,M3如何与M1具有相同的形状?你的问题对我来说并不完全清楚......
  • @usethedeathstar 类似但我试图使用 numpy 数组
  • 给我们一个带有样本数据的迭代解决方案(np.ones 或np.zeros 可以,因为我们只是担心组合形状)。这样就更容易提出改进建议。

标签: python arrays numpy


【解决方案1】:

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

只需将 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])

现在使用不同形状的构建块I3 = np.eye(3) 对行 M1b、M2b、M3b 执行相同的操作。所以你只有在最后一个维度上有一个 for 循环。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多