python - 使用 numpy 在数组中查找 N 个并发的索引

标签 python arrays numpy indexing

我有一个使用 sp.distance.cdist 获得的数组,这样的数组如下所示:

 [ 0.          5.37060126  2.68530063  4.65107712  2.68530063  4.65107712
   2.04846297  7.41906423  4.11190697  6.50622284  4.11190697  6.50622284]
 [ 5.37060126  0.          4.65107712  2.68530063  4.65107712  2.68530063
   7.41906423  2.04846297  6.50622284  4.11190697  6.50622284  4.11190697]
 [ 2.68530063  4.65107712  0.          2.68530063  4.65107712  5.37060126
   4.11190697  6.50622284  2.04846297  4.11190697  6.50622284  7.41906423]
 [ 4.65107712  2.68530063  2.68530063  0.          5.37060126  4.65107712
   6.50622284  4.11190697  4.11190697  2.04846297  7.41906423  6.50622284]
 [ 2.68530063  4.65107712  4.65107712  5.37060126  0.          2.68530063
   4.11190697  6.50622284  6.50622284  7.41906423  2.04846297  4.11190697]
 [ 4.65107712  2.68530063  5.37060126  4.65107712  2.68530063  0.
   6.50622284  4.11190697  7.41906423  6.50622284  4.11190697  2.04846297]
 [ 2.04846297  7.41906423  4.11190697  6.50622284  4.11190697  6.50622284
   0.          9.4675272   4.7337636   8.19911907  4.7337636   8.19911907]
 [ 7.41906423  2.04846297  6.50622284  4.11190697  6.50622284  4.11190697
   9.4675272   0.          8.19911907  4.7337636   8.19911907  4.7337636 ]
 [ 4.11190697  6.50622284  2.04846297  4.11190697  6.50622284  7.41906423
   4.7337636   8.19911907  0.          4.7337636   8.19911907  9.4675272 ]
 [ 6.50622284  4.11190697  4.11190697  2.04846297  7.41906423  6.50622284
   8.19911907  4.7337636   4.7337636   0.          9.4675272   8.19911907]
 [ 4.11190697  6.50622284  6.50622284  7.41906423  2.04846297  4.11190697
   4.7337636   8.19911907  8.19911907  9.4675272   0.          4.7337636 ]
 [ 6.50622284  4.11190697  7.41906423  6.50622284  4.11190697  2.04846297
   8.19911907  4.7337636   9.4675272   8.19911907  4.7337636   0.        ]]

我正在尝试使用 numpy 来搜索一些值,例如 2.72.3 之间的值,同时我也会喜欢在数组的行中找到索引时返回索引。我读了很多书,并且找到了例如 .argmin(),它部分完成了我想要的(但它只向您显示零或小于零的值所在的位置,并且只有一个并发)。在 .argmin 的文档中我找不到任何关于如何找到与零不同的最小值的相关信息,并且在第一次并发后它不会停止。我需要在间隔内为这些值执行此操作。为了更好地解释我自己,这是我期望得到的:

例如:

[row (0), index (2), index (4)]
[row (1), index (3), index (5)]
[row (2), index (0), index (3)]

执行此操作的最佳方法是什么?与此同时,我会继续尝试,如果找到解决方案,我会在此处发布。

谢谢。

最佳答案

您要查找的是 np.argwhere 函数,它会按索引告诉您数组中的条件在何处得到满足。

v = np.array([[ 0.     ,     5.37060126,  2.68530063 , 4.65107712 , 2.5 ],
              [ 5.37060126 ,  4.65107712 , 2.68530063 ,.11190697,1 ]])


np.argwhere((v > 2.3) & (v < 2.7))

array([[0, 2],
        [0, 4],
         [1, 2]])

关于python - 使用 numpy 在数组中查找 N 个并发的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20071729/

相关文章:

python - 将日期字符串转换为 UTC 日期时间

Python 分析器 Statprof 多次出现相同的过程

python - 将任意长度列表映射到固定长度,保留内部结果的频率和位置(尽可能多)

python - 如何将字符串彼此放在一起并为其分配一个数字?

c++ - 如何解决错误 : ISO C++ forbids variable-size array

javascript - 同一页面上有多个 js 进度条?

python - 无法将 Pandas Dataframe 列转换为 float

python - numpy向量运算的核心使用上限

php - Laravel 集合更改键问题

Python numpy - 随机数的再现性