根据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_u)=3 3 5
但是为了数字块在
^{pr2}$形状=(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函数不是matlab函数的“插入式”替换。通常情况下,“等价”函数的使用方式有细微差别。适应确实需要时间,但我发现这种转变是非常值得的。在
在本例中,
np.tile
文档指出当您试图将数组平铺到比定义的更高的维时会发生什么情况在本例中,数组被转换为
[1, 3, 3]
的形状,然后平铺。因此,要获得您想要的行为,只需确保在数组中添加一个新的singleton维度注意这里我使用了
None
(即np.newaxis
)和省略号符号在数组的末尾指定一个新的维度。您可以找到有关这些功能的更多信息here。在另一个选择,这是受OP评论启发的:
^{pr2}${a2'在这种情况下由^'数组^'构造。在
正如@hpaulj指出的,Matlab和NumPy显示矩阵的方式不同。要复制Matlab输出,可以执行以下操作:
祝你好运!在
让我们试试比较,注意使形状和价值多样化。在
numpy等价物-或多或少:
^{pr2}$再次numpy,但是使用
order F
来更好地匹配matlabfortran派生的布局我在开始时添加了新的numpy维度,因为在很多方面它可以更好地复制MATLAB在结尾添加它的实践。在
尝试在末尾添加新维度。形状是(3,4,5),但您可能不喜欢显示。在
另一个需要考虑的问题是,当你把瓷砖弄平后会发生什么?在
顺序为F
a
使用C顺序数组:
最后一个匹配八度音阶布局。在
也是这样:
困惑了吗?在
相关问题 更多 >
编程相关推荐