我有一个像下面那样的numpy数组,它有三列,col.1是距离col。 2和3是节点的id。我想找到距离第1列的最小距离,但仅限于节点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 :(得分:2)
您可以找到带有0作为第二个索引的元素,all_data[all_data[:, 1]==0]
:
print all_data[np.argmax(all_data[all_data[:, 1]==0]), 1]
答案 1 :(得分:2)
来自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
函数{找到第一列的最小值{ {1}},使用可选参数min
限制搜索axis=0
列中的最小值。
0
就是这样。
如果你想要第0列中的最小值,那么你可以获得每列的最小值,然后是表达式
In[3]: np.min(a[a[:,1]==0.0],axis=0)
Out[3]: array([ 0.84375971, 0. , 1. ])
给你--- OTOH,如果你想要最小值的行,它会有点不同
np.min(a[a[:,1]==0.0],axis=0)[0]
即使我们在单个表达式中编写a[np.argmin(a[a[:,1]==0],axis=0)[0]]
三次这样的事实看起来有点不自然,它也能完成它的工作。
答案 2 :(得分:1)
过滤第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()