从二维数组的numpy数组高效地创建块numpy数组

2024-04-19 02:31:11 发布

您现在位置:Python中文网/ 问答频道 /正文

首先是一个简单的例子

import numpy as np

a = np.ones((2,2))
b = 2*np.ones((2,2))
c = 3*np.ones((2,2))
d = 4*np.ones((2,2))
e = np.array([[a,b],[c,d]])
print(np.vstack(np.array([np.hstack(e[i,:]) for i in range(2)])))

产生

^{2}$

这与print(np.bmat(e.tolist()))print(np.bmat([[a,b],[c,d]]))的结果完全相同(对np.bmat创建一个可以使用np.asarray()进行转换的numpy矩阵进行模化)。在

但是,我的问题是,我有一个代码,我创建了一个36个大的numpy数组(目前,会变得更晚,比如400个)2D numpy数组,我想从中创建一个大块头numpy数组。我想高效地执行此操作,如果可能的话,避免在列表和numpy数组之间进行任何转换,因为这是一个更大的循环构造的一部分,因此将执行多次(数组每次都不同)。有可能吗?在


Tags: inimportnumpyforasnponesrange
1条回答
网友
1楼 · 发布于 2024-04-19 02:31:11
np.swapaxes(e, 1, 2).reshape([4, 4])

如果您检查从e中绘制元素的顺序以生成所需的输出,您会发现我们需要沿着轴3,然后是1,然后是2,然后是0。reshape沿着轴3、轴2、轴1、轴0绘制元素,因此我们在调用reshape之前交换轴1和轴2。在

相关问题 更多 >