在python中查找我使用的数组的最小值的索引y = numpy.argmin(someMat)
我能找到这个矩阵的最小值,使它不在指定的范围内整齐地排列吗?

最佳答案

“我能找到这个矩阵的最小值吗?这样它就不会整齐地位于指定的范围内了?”
如果你只关心满足某个条件的最小值而不是位置,那么

>>> numpy.random.seed(1)
>>> m = numpy.random.randn(5.,5.)
>>> m
array([[ 1.62434536, -0.61175641, -0.52817175, -1.07296862,  0.86540763],
       [-2.3015387 ,  1.74481176, -0.7612069 ,  0.3190391 , -0.24937038],
       [ 1.46210794, -2.06014071, -0.3224172 , -0.38405435,  1.13376944],
       [-1.09989127, -0.17242821, -0.87785842,  0.04221375,  0.58281521],
       [-1.10061918,  1.14472371,  0.90159072,  0.50249434,  0.90085595]])
>>> m[~ ((m < 0.5) | (m > 0.8))].min()
0.50249433890186823

如果您确实希望通过argmin找到位置,那么这就有点棘手,但一种方法是使用屏蔽数组:
>>> numpy.ma.array(m,mask=((m<0.5) | (m > 0.8))).argmin()
23
>>> m.flat[23]
0.50249433890186823

注意,这里的条件是翻转的,因为掩码对于排除的值是真的,而不是包含的值。
更新:似乎“在指定范围内”并不意味着最小值不在某些范围内,而是希望从基于x,y坐标的搜索中排除矩阵的部分。这里有一种方法(与之前相同的矩阵):
>>> xx, yy = numpy.indices(m.shape)
>>> points = ((xx == 0) & (yy == 0)) | ((xx > 2) & (yy < 3))
>>> points
array([[ True, False, False, False, False],
       [False, False, False, False, False],
       [False, False, False, False, False],
       [ True,  True,  True, False, False],
       [ True,  True,  True, False, False]], dtype=bool)
>>> m[points]
array([ 1.62434536, -1.09989127, -0.17242821, -0.87785842, -1.10061918,
        1.14472371,  0.90159072])
>>> m[points].min()
-1.1006191772129212

如果需要位置,则使用相应的屏蔽数组变量。[编辑为使用索引而不是mgrid;直到今天在另一个答案中使用它,我才真正忘记它!]
如果我仍然是错的:^),这也不是你想要的,请编辑你的问题,包括一个3x3的例子,你想要的输入和输出。

08-25 01:10