[英]Matlab vs Python: Reshape
所以我发现了这个:
转换 MATLAB 代码时,可能需要先将矩阵整形为线性序列,执行一些索引操作,然后再整形。 由于 reshape(通常)在同一存储上生成视图,因此应该可以相当有效地执行此操作。
请注意,Numpy 中 reshape 使用的扫描顺序默认为“C”顺序,而 MATLAB 使用 Fortran 顺序。 如果您只是简单地转换为线性序列并返回,这无关紧要。 但是,如果您要从依赖于扫描顺序的 MATLAB 代码转换重塑,则此 MATLAB 代码:
z = reshape(x,3,4);
应该成为
z = x.reshape(3,4,order='F').copy()
在 Numpy。
当我在 MATLAB 中执行时,我有一个名为mafs
的多维 16*2 数组:
mafs2 = reshape(mafs,[4,4,2])
我得到的东西与在 python 中不同:
mafs2 = reshape(mafs,(4,4,2))
甚至
mafs2 = mafs.reshape((4,4,2),order='F').copy()
这有什么帮助吗? 谢谢你们。
例子:
>> mafs = [(1:16)' (17:32)']
mafs =
1 17
2 18
3 19
4 20
5 21
6 22
7 23
8 24
9 25
10 26
11 27
12 28
13 29
14 30
15 31
16 32
>> reshape(mafs,[4 4 2])
ans(:,:,1) =
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
ans(:,:,2) =
17 21 25 29
18 22 26 30
19 23 27 31
20 24 28 32
>>> import numpy as np
>>> mafs = np.c_[np.arange(1,17), np.arange(17,33)]
>>> mafs.shape
(16, 2)
>>> mafs[:,0]
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
>>> mafs[:,1]
array([17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32])
>>> r = np.reshape(mafs, (4,4,2), order="F")
>>> r.shape
(4, 4, 2)
>>> r[:,:,0]
array([[ 1, 5, 9, 13],
[ 2, 6, 10, 14],
[ 3, 7, 11, 15],
[ 4, 8, 12, 16]])
>>> r[:,:,1]
array([[17, 21, 25, 29],
[18, 22, 26, 30],
[19, 23, 27, 31],
[20, 24, 28, 32]])
我自己也遇到了类似的问题,因为我也在尝试从 MATLAB 过渡到 Python。 我终于能够将一个以深度、行、列、格式给出的 numpy 矩阵转换为单张列向量(每张图像)。
在 MATLAB 中,我会做类似的事情:
output = reshape(imStack,[row*col,depth])
在 Python 中,这似乎转化为:
import numpy as np
output=np.transpose(imStack)
output=output.reshape((row*col, depth), order='F')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.