当前位置:  开发笔记 > 编程语言 > 正文

将python/numpy"A.argmin(axis = -1)"翻译成等效的matlab表达式

如何解决《将python/numpy"A.argmin(axis=-1)"翻译成等效的matlab表达式》经验,为你挑选了1个好方法。

我是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尝试了很多,但这并没有成功,最终它必须适用于非常大的矩阵.

如果有人能帮助我,我会很高兴的.提前致谢!



1> Andras Deak..:

唯一的问题是你在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 ndarrayshape (2,3,4),这就是为什么我通过3x4A(1,:,:)和分配矩阵来创建MATLAB对应物的原因A(2,:,:).我发现这可能是混乱的原因,因为你声称最终得到了一个大小的矩阵[2,1,3](而不是[2,1,4]),但是你的最后两个维度必须在MATLAB中切换.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有