python - 我想获取不包括零的行的最小数字索引

标签 python pandas numpy scikit-learn

考虑以下生成以下 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

如下所示

数组([[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 和 col=4 来说,是 row0 的最小距离code> 到除自身之外的另一行。 我正在尝试使用以下代码来完成这项工作!但是 np.nonzeros() 搞乱了游戏。 np.argmin(dst[0, np.nonzero(dst[0,:])]) 我得到 3 作为输出,我应该得到 4。我知道 np.nonzero() 返回另一组维度 [1,2,3,4],其中 argmin 选择 第三列是dst矩阵的实际第四列。需要帮忙!提前致谢!!

最佳答案

使用 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

关于python - 我想获取不包括零的行的最小数字索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58479634/

相关文章:

python - 将数据帧转换为记录数组(并将对象转换为字符串)

python - 如何将数组从 C 传递到嵌入式 python 脚本

python - 从 Django 1.4 到 Django 2.1.5 : custom field to_python() not called anymore

python - 如何遍历python中的字典列表?

python - 如何子类化 numpy .`ma.core.masked_array` ?

python - 使用另一个数据帧中的值对对数据帧进行子化

python - python pandas 中的嵌套数据框/索引

python - 当数据帧包含混合数据类型时,Pyarrow from_pandas 会使解释器崩溃

python - 将字母数字值转换为日期

python - 如何将 pandas DataFrame 转换为字节,反之亦然?