我是python的新手,并获得了python代码,可以将我的工作翻译成Matlab.我有一个具体的问题:
我有一个大小的矩阵,例如(rows/columns/3rd dim)=(3/4/2).
A = array([[[1, 56, 0, 6],[5, 9, 10, 3],[50, 51, 59, 64]],[[2, 6, 4, 3],[10, 80, 53, 6],[12, 5, 36, 15]]])
对于这个矩阵(和其他),我已经给出了这个功能
B = A.argmin(axis=-1)
它搜索每行中最小的索引.(numpy.argmin手册)
B在这种情况下:
B = array([[2, 3, 0],[0, 3, 1]])
和大小(行/列)=(2/3).
我的意思是将其完全转换为Matlab版本,以便我得到这个矩阵,但在Matlab中([Min Matlab Manual] [2])
[~,B] = min(A,[],2)
给我一个大小矩阵(行/列/第三个暗)=(3/1/2). Matlab输出
如果一个人认为python开始索引为0而matlab为1,则每行中最小值的索引是相同的.问题是矩阵的顺序.
如何在pylab中使用matlab获得每行最小值的最小值?
我用permute和vertcat尝试了很多,但这并没有成功,最终它必须适用于非常大的矩阵.
如果有人能帮助我,我会很高兴的.提前致谢!
唯一的问题是你在MATLAB中采用了错误的维度.将axis=-1
在numpy的对应于最后一个维度(所以我不认为它沿着每个看起来排正如您在问题陈述),即min(A,[],3)
:
A(1,:,:)=[1 56 0 6; 5 9 10 3; 50 51 59 64]; A(2,:,:)=[2 6 4 3; 10, 80, 53, 6; 12, 5, 36, 15]; [~,B] = min(A,[],3);
导致:
B = 3 4 1 1 4 2
正如你所说,这对应于numpy指数矩阵
In [409]: B = A.argmin(axis=-1) In [410]: B Out[410]: array([[2, 3, 0], [0, 3, 1]])
请注意,如果您已经min(A,[],2)
在MATLAB中使用过,那么结果矩阵就是这样的size
[2,1,4]
.要摆脱单例维度,你将不得不squeeze(B)
用来获得一个二维数组.
另请注意,您可能搞砸了原始矩阵.你的numpy ndarray
是shape
(2,3,4)
,这就是为什么我通过3x4
为A(1,:,:)
和分配矩阵来创建MATLAB对应物的原因A(2,:,:)
.我发现这可能是混乱的原因,因为你声称最终得到了一个大小的矩阵[2,1,3]
(而不是[2,1,4]
),但是你的最后两个维度必须在MATLAB中切换.