JEq*_*hua 17 python matlab numpy matrix scipy
所以我发现了这个:
转换MATLAB代码时,可能需要首先将矩阵重新整形为线性序列,执行一些索引操作,然后重新整形.由于重塑(通常)会在同一存储上生成视图,因此应该可以相当有效地执行此操作.
请注意,Numpy中reshape使用的扫描顺序默认为'C'顺序,而MATLAB使用Fortran顺序.如果您只是简单地转换为线性序列,那么这无关紧要.但是如果要从依赖于扫描顺序的MATLAB代码转换重构,那么这个MATLAB代码:
Run Code Online (Sandbox Code Playgroud)z = reshape(x,3,4);
应该成为
Run Code Online (Sandbox Code Playgroud)z = x.reshape(3,4,order='F').copy()
在Numpy.
mafs
当我在MATLAB中执行时,我有一个多维16*2数组:
mafs2 = reshape(mafs,[4,4,2])
Run Code Online (Sandbox Code Playgroud)
我得到的东西不同于我在python中做的事情:
mafs2 = reshape(mafs,(4,4,2))
Run Code Online (Sandbox Code Playgroud)
甚至
mafs2 = mafs.reshape((4,4,2),order='F').copy()
Run Code Online (Sandbox Code Playgroud)
对此有何帮助?谢谢你们.
Amr*_*mro 23
例:
>> 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
Run Code Online (Sandbox Code Playgroud)
>>> 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]])
Run Code Online (Sandbox Code Playgroud)