gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:48:48 26 4
gpt4 key购买 nike

我是 python 的新手,我将 python 代码转换为 Matlab 以供我的工作使用。我有一个具体问题:

我有一个矩阵,例如(行/列/第三维)=(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 Manual)

B在这种情况下:

B = array([[2, 3, 0],[0, 3, 1]])

大小(行/列)= (2/3)。

我的任务是将它准确地转换成一个 Matlab 版本,这样我就能准确地得到这个矩阵,但是在 Matlab 中([Min Matlab 手册][2])

[~,B] = min(A,[],2)

给我一个大小矩阵(行/列/第三暗)=(3/1/2)。 Matlab Output

每一行中最小值的索引是相同的,如果考虑到 python 从 0 开始索引,而 matlab 从 1 开始索引。问题是矩阵的顺序。

如何像 python 在 matlab 中那样准确地获取每行最小值的索引?

我对 permute 和 vertcat 进行了很多尝试,但这没有成功,最后它必须适用于非常大的矩阵。

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

最佳答案

唯一的问题是您在 MATLAB 中采用了错误的维度。 numpy 中的 axis=-1 对应于最后一个维度(所以我不认为它看起来像你在问题中所说的那样沿着每一行 row ),即 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]])

请注意,如果您在 MATLAB 中使用了 min(A,[],2),则生成的矩阵将是 size [ 2,1,4]。要摆脱单一维度,您将不得不使用 squeeze(B) 来获取二维数组。

另请注意,您可能弄乱了原始矩阵。你的 numpy ndarrayshape (2,3,4),这就是我通过分配 创建 MATLAB 副本的原因3x4 矩阵到 A(1,:,:)A(2,:,:)。我发现这可能是造成混淆的原因,因为您声称最终得到了一个大小为 [2,1,3] 的矩阵(而不是 [2,1,4]),但是你的最后两个维度必须在 MATLAB 中切换。

关于python - 将 python/numpy "A.argmin(axis=-1)"翻译成等效的 matlab 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34600456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com