首先是一个简单的例子
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)])))
产生
[[ 1. 1. 2. 2.]
[ 1. 1. 2. 2.]
[ 3. 3. 4. 4.]
[ 3. 3. 4. 4.]]
与print(np.bmat(e.tolist()))
或print(np.bmat([[a,b],[c,d]]))
的结果完全相同(模数np.bmat
使用np.asarray()
创建可以投射的numpy矩阵的事实。
然而,我的问题是我有一个代码,我创建一个36的大型numpy数组(暂时,将变得更晚,如400)2D numpy数组,我想创建一个大块numpy数组他们我想有效地做到这一点,并且如果可能的话,避免列表和numpy数组之间的任何转换,因为这是更大的循环结构的一部分,因此将多次完成(每次数组都不同)。这可能吗?
答案 0 :(得分:3)
np.swapaxes(e, 1, 2).reshape([4, 4])
如果你检查从e
绘制元素的顺序以产生我们想要的输出,你会发现我们想要沿着轴3,然后是1,然后是2,然后是0. {{ 1}}沿轴3绘制元素,然后是2,然后是1,然后是0,所以我们在调用reshape
之前交换轴1和2。