如何找到除一个特定索引外的最小数

2024-06-28 19:50:46 发布

您现在位置:Python中文网/ 问答频道 /正文

(编辑) 对不起,我的问题不清楚。所以,我想找到某一行和某一列的最小值,而不取它们的交点,正如@ParthSindhu所说:)

我想从二维数组中找到最小值,除了一个数。(我用的是numpy数组)

array([[30, 15, 41, 26, 12],
       [ 4, 19, 22, 40,  1],
       [41, 21,  0, 43, 22],
       [ 9, 40,  6, 10, 30],
       [24, 49, 22,  8, 41]])

例如,在第2行和第2列中,我想在每一行和第2列中找到除0以外的最小值。你知道吗

所以,答案是第2行21,第2列6。你知道吗

我试着用1d数组实现这段代码

a = np.arange(9, -1, -1)     # a = array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
b = a[np.arange(len(a))!=3]  # b = array([9, 8, 7, 5, 4, 3, 2, 1, 0])

但是,我只能找到那一排,却找不到那一排

a[np.arange(len(a))!=1].min()

上面的代码返回6

我怎么能对col做同样的事?你知道吗

对不起,问题不太清楚。你知道吗


Tags: 答案代码numpy编辑lennpcol数组
3条回答

如果忽略交叉点,可以这样做:

import numpy as np
a = np.array([[30, 15, 41, 26, 12],
     [ 4, 19, 22, 40,  1],
     [41, 21,  0, 43, 22],
     [ 9, 40,  6, 10, 30],
     [24, 49, 22,  8, 41]]
row = 2
col = 2
col_indices = np.delete(np.arange(a.shape[0]), row)
row_indices = np.delete(np.arange(a.shape[1]), col)
col_min = a[col_indices, col].min()
row_min = a[row, row_indices].min()
print(col_min, row_min)

我相信还有比这更好的方法,我就是这么做的。你知道吗

您可以使用np.amin(a, axis = 1)获得每行中数字最小的数组。你知道吗

a = np.array([[30, 15, 41, 26, 12],
              [ 4, 19, 22, 40,  1],
              [41, 21,  0, 43, 22],
              [ 9, 40,  6, 10, 30],
              [24, 49, 22,  8, 41]])

print(np.amin(a, axis = 1))

这导致

>> [12  1  0  6  8]

现在您可以再次运行此命令来查找此数组中的最小数字。你知道吗

Dummy = np.amin(a, axis = 1)
print(np.amin(Dummy))

你得到的是最小的数字。你知道吗

>> 0

如果将axis设置为0,则可以更改轴。因此可以在阵列的每个轴上执行此操作。你知道吗

a = np.array([[30, 15, 41, 26, 12],
              [ 4, 19, 22, 40,  1],
              [41, 21,  0, 43, 22],
              [ 9, 40,  6, 10, 30],
              [24, 49, 22,  8, 41]])

print(np.amin(a, axis = 0))

>> [ 4 15  0  8  1]

可以使用屏蔽数组:

a = np.array([[30, 15, 41, 26, 12],
              [ 4, 19, 22, 40,  1],
              [41, 21,  0, 43, 22],
              [ 9, 40,  6, 10, 30],
              [24, 49, 22,  8, 41]])

masked_a = np.ma.masked_array(a, mask=a == 0)
min_cols = masked_a.min(axis=0).data
min_rows = masked_a.min(axis=1).data

print(min_rows)
print(min_cols)
[12  1 21  6  8]
[ 4 15  6  8  1]

相关问题 更多 >