You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

numpy.ndarray类型20×20矩阵调用np.matrix.argmin报错,求正确获取argmin的方法

numpy.ndarray类型20×20矩阵调用np.matrix.argmin报错,求正确获取argmin的方法

嘿,你这个问题其实是踩了numpy里两种矩阵类型的小坑啦!你的变量d明明是numpy.ndarray类型,但你却调用了np.matrix.argmin()这个专门给numpy.matrix类用的方法,这就导致了那个奇怪的AttributeError。

为啥会报错呢?简单说,np.matrix.argmin()内部会先调用普通ndarray的argmin()得到一个整数结果,但它还想给这个结果加个_align()方法来适配矩阵的返回格式,可普通的numpy.int64数值根本没这个方法,自然就崩了。

给你几个正确的解决办法,按需选就行:

  • 直接获取扁平化的最小值索引
    因为你的d是ndarray,直接用它自带的argmin()方法就好:

    min_index = d.argmin()
    

    这个返回的是把20×20矩阵拉成1维数组后,最小值所在的位置。比如最小值在第1行第2列(索引从0开始),那结果就是1*20 + 2 = 22。

  • 获取二维坐标(行+列)
    如果想知道最小值具体在第几行第几列,可以用np.unravel_index()把扁平化索引转成二维坐标:

    flat_idx = d.argmin()
    row, col = np.unravel_index(flat_idx, d.shape)
    

    这样row就是行索引,col就是列索引,一目了然。

  • 按行/列分别求最小值索引
    如果需要每一列的最小值所在行,或者每一行的最小值所在列,可以指定axis参数:

    • 求每列的最小值行索引:d.argmin(axis=0),返回长度为20的数组
    • 求每行的最小值列索引:d.argmin(axis=1),同样返回长度为20的数组

另外提一句,你说原本是用np.matrix保存结果,但实际d是ndarray,大概率是在和pytorch交互的过程中自动转成了ndarray(pytorch的tensor转numpy默认就是ndarray),所以直接用ndarray的方法完全没问题,不用再去碰matrix类的方法啦。

备注:内容来源于stack exchange,提问作者Ali.A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:22:35