【发布时间】:2015-08-26 23:19:44
【问题描述】:
根据What is the equivalent of MATLAB's repmat in NumPy,我尝试使用python从3x3数组构建3x3x5数组。
在 Matlab 中,这符合我的预期。
a = [1,1,1;1,2,1;1,1,1];
a_= repmat(a,[1,1,5]);
尺寸(a_) = 3 3 5
但是对于 numpy.tile
b = numpy.array([[1,1,1],[1,2,1],[1,1,1]])
b_ = numpy.tile(b, [1,1,5])
b_.shape = (1, 3, 15)
如果我想生成与 Matlab 中相同的数组,那么等价的是什么?
编辑 1
我期望得到的输出是
b_(:,:,1) =
1 1 1
1 2 1
1 1 1
b_(:,:,2) =
1 1 1
1 2 1
1 1 1
b_(:,:,3) =
1 1 1
1 2 1
1 1 1
b_(:,:,4) =
1 1 1
1 2 1
1 1 1
b_(:,:,5) =
1 1 1
1 2 1
1 1 1
但是@farenorth 和numpy.dstack 给出的是
[[[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]]
[[1 1 1 1 1]
[2 2 2 2 2]
[1 1 1 1 1]]
[[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]]]
【问题讨论】:
-
numpy.dstack((b,b,b,b,b))以正确的形状给出奇怪的输出。 -
@farenorth给了你正确的东西。你有没有在 0:4 看到b_[:,:,i]for i?不要将显示样式与实际值混淆。 -
MATLAB 改变第一个维度最快,最后一个最慢。因此它将“平面”显示为 (:,:,1) 等。
numpy以最快的速度迭代最后一个维度,最后一个维度。因此它将“平面”显示为 2d 块,在本例中为 3x5。
标签: python matlab numpy equivalent