如何使用numpy where函数编写递归搜索?

时间:2019-05-14 23:17:54

标签: python numpy recursion indexing

我正在编写一个递归函数来查找索引对。 在我的示例中,向量i和j是矩阵的非零元素的i和j索引。

现在,我想找到“唯一”的索引对,因此我可以按对角线形式对矩阵进行排序。或至少消除零元素

我用numpy编写了一个函数。

import numpy as np

i = np.array([0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 8, 8])
j = np.array([0, 3, 4, 0, 2, 4, 1, 5, 2, 6, 8, 3, 8, 4, 5, 7, 4, 6, 7, 8])
numbers = np.array([-1.])

def iterate(i, j, iter, numbers):
    ii, = np.where(i == iter)
    jj, = np.where(j[ii] != numbers)

    try:
        for jjj in jj:
            numbers = np.append(numbers, [jjj])
            if iter < np.amax(i)+1:
                iterate(i, j, iter+1, numbers)
            else:
                return numbers
    except:
        print("exception")

如果我的迭代变量超过i中最大值的长度,我会期望返回。 问题是numpy为多次比较操作抛出错误:

jj, = np.where(j[ii] != numbers)

1 个答案:

答案 0 :(得分:0)

通过在print行之后添加ii,=,我看到numbers[-1,0],并且:

In [76]: j[[3,4,5]]                                                             
Out[76]: array([0, 2, 4])
In [77]: j[[3,4,5]]!=np.array([-1,0])                                           
/usr/local/bin/ipython3:1: DeprecationWarning: elementwise comparison failed; this will raise an error in the future.
  #!/usr/bin/python3
Out[77]: True

它不喜欢将3元素数组与2元素数组进行比较。过去,它可以容忍不匹配,但将来将不被允许。

您要在这里做什么?随着每个追加,numbers会变长,但是j[ii]会因i而异。

您是否正在寻找两个数组之间的精确匹配?元素方面?二维笛卡尔比赛?