簡體   English   中英

如何從numpy數組的一部分列中找到最小值?

[英]How to find the minimum value from a part of a column in numpy array?

我有一個如下的numpy數組,其中有三列,col.1是距離,col。 2和3是節點的ID。 我想找到距第一列的最小距離,但僅適用於節點ID 0。

distance   i    j
[[ 1.18801546  0.          1.        ]
 [ 2.30434659  0.          2.        ]
 [ 3.46650731  0.          3.        ]
 [ 0.85449778  0.          4.        ]
 [ 0.84375971  0.          5.        ]
 [ 2.66327706  0.          6.        ]
 [ 1.84376278  0.          7.        ]
 [ 1.29614483  0.          8.        ]
 [ 2.86955783  0.          9.        ]
 [ 1.55222839  1.          2.        ]
 [ 2.56904021  1.          3.        ]
 [ 0.56480212  1.          4.        ]
 [ 0.81877367  1.          5.        ]
 [ 2.87466569  1.          6.        ]
 [ 1.01649384  1.          7.        ]
 [ 1.95662814  1.          8.        ]
 [ 3.15455155  1.          9.        ]
 [ 1.1897445   2.          3.        ]
 [ 1.65880881  2.          4.        ]
 [ 2.21427178  2.          5.        ]
 [ 2.12770111  2.          6.        ]
 [ 0.59811712  2.          7.        ]
 [ 2.15373458  2.          8.        ]
 [ 2.47151944  2.          9.        ]
 [ 2.78849347  3.          4.        ]
 [ 3.29699194  3.          5.        ]
 [ 2.90479808  3.          6.        ]
 [ 1.6405647   3.          7.        ]
 [ 3.2628552   3.          8.        ]
 [ 3.24135083  3.          9.        ]
 [ 0.59483003  4.          5.        ]
 [ 2.55441835  4.          6.        ]
 [ 1.22876339  4.          7.        ]
 [ 1.62616729  4.          8.        ]
 [ 2.7776452   4.          9.        ]
 [ 3.07635954  5.          6.        ]
 [ 1.7483827   5.          7.        ]
 [ 1.993107    5.          8.        ]
 [ 3.26526698  5.          9.        ]
 [ 2.34443787  6.          7.        ]
 [ 1.59405468  6.          8.        ]
 [ 0.46781919  6.          9.        ]
 [ 1.92762241  7.          8.        ]
 [ 2.69818642  7.          9.        ]
 [ 1.85007201  8.          9.        ]]

我嘗試使用

print all_data[np.argmax(all_data[:, 0]), 1]

但是它不僅返回我想要的節點0,而且返回整個列的最小值。 如何獲得僅與節點“ 0”關聯的最小值? 另外,argmin值似乎已取整! 任何想法如何解決這些問題? 順便說一下,我正在使用numpy數組。

您可以找到帶有0作為第二個索引的元素,其中all_data[all_data[:, 1]==0]

print all_data[np.argmax(all_data[all_data[:, 1]==0]), 1]

從OP問題

如何獲得僅與節點“ 0”關聯的最小值?

In [1]: import numpy as np

In [2]: a=np.array([[ 1.18801546, 0., 1., ],
   ...:  [ 2.30434659, 0., 2., ],
   ...:  [ 3.46650731, 0., 3., ],
   ...:  [ 0.85449778, 0., 4., ],
   ...:  ...
   ...:  [ 1.29614483, 0., 8., ],
   ...:  [ 2.86955783, 0., 9., ],])

具有進口和numpy的創建陣列作為a ,我們創建使用布爾陣列上它的視圖a[:,1]==0.0 ,並找到使用的第一列的最小值numpy功能min ,用可選參數axis=0以限制在第0列中搜索最小值。

In[3]: np.min(a[a[:,1]==0.0],axis=0)
Out[3]: array([ 0.84375971,  0.        ,  1.        ])

就這樣。

這將為您提供每一列的最小值,如果您希望在列0中獲得最小值,則表達式

np.min(a[a[:,1]==0.0],axis=0)[0]

給您--- OTOH,如果您要使行具有最小值,則有點不同

a[np.argmin(a[a[:,1]==0],axis=0)[0]]

即使我們在一個表達式中寫a三遍這個事實看起來似乎並不那么容易理解,但這確實可以做到。

為列0中的選定值過濾數據,然后計算最小距離:

selected_value = 0
value_col = 0  # The column containing the selected value.
dist_col = 1  # The column containing the distance value.
min_val = all_data[all_data[:, value_col] == selected_value, dist_col].min()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM