【问题标题】:I want to get minimun number's index for a row excluding zeros我想获得不包括零的行的最小数字索引
【发布时间】:2020-02-17 03:35:41
【问题描述】:

考虑以下代码,该代码生成以下dst 矩阵。

tmp = pd.DataFrame()
tmp['a'] = np.random.randint(1, 10, 5)
tmp['b'] = np.random.randint(1, 10, 5)
dst = pairwise_distances(tmp, tmp, metric='l2')
dst

如下所示

array([[0. , 5.38516481, 5. , 4.12310563, 2. ],
[5.38516481, 0. , 1.41421356, 3.16227766, 5. ],
[5. , 1.41421356, 0. , 4. , 4.12310563],
[4.12310563, 3.16227766, 4. , 0. , 5. ],
[2. , 5. , 4.12310563, 5. , 0. ]])

现在,我想以某种方式将4 作为输出列,因为row=0 and col=4row0 与另一行的最小距离。 我正在尝试使用以下代码来完成这项工作!但是np.nonzeros() 搞砸了游戏。 np.argmin(dst[0, np.nonzero(dst[0,:])]) 我得到3 作为输出,我应该得到4。我知道np.nonzero() 返回另一组维度[1,2,3,4],其中argmin 选择3rd 列,这是4th 矩阵的实际4th 列。需要帮忙!提前致谢!!

【问题讨论】:

    标签: python pandas numpy scikit-learn


    【解决方案1】:

    使用np.min 代替argmin,并将结果与​​dst[0,:] 进行比较。最后传给np.flatnonzeronp.nonzero

    np.flatnonzero(np.min(dst[0,np.nonzero(dst[0,:])]) == dst[0,:])
    
    Out[150]: array([4], dtype=int64)
    

    或者

    np.nonzero(np.min(dst[0,np.nonzero(dst[0,:])]) == dst[0,:])[0]
    
    Out[151]: array([4], dtype=int64)
    

    如果要返回整数索引,可以在最后一步使用np.argmax

    np.argmax(np.min(dst[0,np.nonzero(dst[0,:])]) == dst[0,:])
    
    Out[157]: 4
    

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      相关资源
      最近更新 更多