首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy数组numpy数组的numpy数组

numpy数组numpy数组的numpy数组
EN

Stack Overflow用户
提问于 2013-12-02 21:52:11
回答 1查看 218关注 0票数 1

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

那是,

代码语言:javascript
复制
M1 = [ [A1 B1 C1]
       [D1 E1 F1] ]

A1、B1、C1、D1、E1、F1是二维numpy数组。A1、B1和C1的形状相同。D1、E1、F1的形状相同。Shape of A1 != D1等等。

同样的,我也有

代码语言:javascript
复制
M2 = [ [A2 B2 C2]
       [D2 E2 F2] ]

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

代码语言:javascript
复制
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循环就能做到这一点的方法呢?

另外,我想知道如果我想要A30,0作为:

代码语言:javascript
复制
A3[0,0] = [ [A1[0,0] A2[0,0]],
            [B1[0,0] B2[0,0]] ]
EN

回答 1

Stack Overflow用户

发布于 2014-05-11 12:17:01

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

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

代码语言:javascript
复制
# 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循环。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20329927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档