MATLAB中repmat是什么,在NumPy中,MATLAB的repmat是什么?

我是这样理解的。 很高兴被纠正,希望这有助于。

假设你有一个2×3元素的matrixM. 这显然有两个维度。

我可以看到Matlab和Python之间没有区别,而要求沿着matrix已经有的维度来操作inputmatrix。 因此这两个命令

repmat(M,m,n) % matlab np.tile(M,(m,n)) # python

对于等级2的matrix(二维)是非常等价的。

当你要求重复/平铺超过inputmatrix的维数时,事情就会变得反直觉。 回到等级2的matrixM并形成2×3,看看输出matrix的大小/形状会发生什么变化就足够了。 说操纵的顺序现在是1,1,2。

在Matlab中

> size(repmat(M,1,1,2)) ans = 2 3 2

它复制了inputmatrix的前两个维(行和列),并将其重复一次到新的第三维(复制两次,即)。 真正的重复matrix的命名repmat 。

在Python中

>>> np.tile(M,(1,1,2)).shape (1, 2, 6)

它已经应用了不同的程序,因为我猜测,序列(1,1,2)的读取方式与Matlab中的不同。 正在从右向左读取列,行和面外尺寸方向的副本数量。 生成的对象与Matlab有不同的形状。 人们不能断言repmat和tile是等效的指令。

为了让tile像repmat一样工作,在Python中必须确保inputmatrix具有与序列中元素一样多的维度。 例如,通过一些预处理和创build相关对象N来完成

N = M[:,:,np.newaxis]

那么,在input端有一个N.shape = (2,3,1)而不是M.shape = (2,3) ,在输出端

>>> np.tile(N,(1,1,2)).shape (2, 3, 2)

这是size(repmat(M,1,1,2))的答案size(repmat(M,1,1,2)) 。 我认为这是因为我们已经引导了Python将第三维添加到(2,3)的右边,而不是左边,这样Python就可以像Matlab中那样计算出序列(1,1,2)阅读的方式。

在N的Python答案[:,:,0]中的元素将包含与元素(:,:,1)相同的值。

最后,当我使用Kronecker产品时,似乎无法findrepmat的等价物

>>> np.kron(np.ones((1,1,2)),M).shape (1, 2, 6)

除非我如上所述将M预处理成N。 所以我认为最常用的方法是使用np.newaxis的方法。

当我们考虑秩3(三维)的matrixL和在输出matrix中没有添加新维度的简单情况时,游戏变得棘手。 这两个看似等价的指令不会产生相同的结果

repmat(L,p,q,r) % matlab np.tile(L,(p,q,r)) # python

因为Matlab中的行,列,面外方向是(p,q,r),而在Python中是(q,r,p),这在rank-2数组中是不可见的。 在那里,人们必须小心,获得相同的结果与两种语言将需要更多的预处理。

我知道这个推理可能不是一般的,但是我可以把它解决这个问题。 希望这会引起其他研究人员的更大的考验。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值