matlab怎样把数组折叠,python – 折叠numpy数组的尾随维度的简单方法?

在Matlab中,我可以执行以下操作:

X = randn(25,25,25);

size(X(:,:))

ans =

25 625

我经常发现自己想要快速折叠数组的尾随维度,并且不知道如何在numpy中执行此操作.

我知道我可以这样做:

In [22]: x = np.random.randn(25,25,25)

In [23]: x = x.reshape(x.shape[:-2] + (-1,))

In [24]: x.shape

Out[24]: (25, 625)

但是x.reshape(x.shape [: – 2](-1,))比简单地做x(:,:)更简洁(并且需要更多关于x的信息).

我显然尝试过类似的numpy索引,但这并不能按预期工作:

In [25]: x = np.random.randn(25,25,25)

In [26]: x[:,:].shape

Out[26]: (25, 25, 25)

有关如何以简洁的方式折叠数组的尾随尺寸的任何提示?

编辑:请注意,我在生成的数组本身之后,而不仅仅是它的形状.我只是在上面的例子中使用size()和x.shape来表示数组是什么样的.

解决方法:

4d或更高时应该发生什么?

octave:7> x=randn(25,25,25,25);

octave:8> size(x(:,:))

ans =

25 15625

你的(:,:)将它减少到2维,结合最后的维度.最后一个维度是MATLAB自动添加和折叠维度的位置.

In [605]: x=np.ones((25,25,25,25))

In [606]: x.reshape(x.shape[0],-1).shape # like Joe's

Out[606]: (25, 15625)

In [607]: x.reshape(x.shape[:-2]+(-1,)).shape

Out[607]: (25, 25, 625)

你的重塑示例做了与MATLAB不同的事情,它只是折叠了最后的2.将它折叠到2个维度,如MATLAB是一个更简单的表达式.

MATLAB简洁,因为您的需求与其假设相符. numpy等价物不是那么简洁,但可以让你更有控制力

例如,要保留最后一个维度,或将维度2合并为2:

In [608]: x.reshape(-1,x.shape[-1]).shape

Out[608]: (15625, 25)

In [610]: x.reshape(-1,np.prod(x.shape[-2:])).shape

Out[610]: (625, 625)

什么是等效的MATLAB?

octave:24> size(reshape(x,[],size(x)(2:end)))

ans =

15625 25

octave:31> size(reshape(x,[],prod(size(x)(3:end))))

标签:python,arrays,multidimensional-array,numpy

来源: https://codeday.me/bug/20190519/1137359.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值