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

Python 如何使用numpy where函数编写递归搜索?,python,numpy,recursion,indexing,Python,Numpy,Recursion,Indexing,我正在写一个递归函数来查找索引对。 在我的例子中,向量i和j是矩阵的非零元素的i和j指数 现在我想找到“唯一”的索引对,这样我就可以按对角线形式对矩阵进行排序。或者至少消除零元素 我用numpy写了一个函数 将numpy导入为np i=np.数组([0,0,0,1,1,1,2,2,3,4,4,5,5,6,6,7,7,8]) j=np.数组([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迭代(i、j、it

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

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

我用numpy写了一个函数

将numpy导入为np
i=np.数组([0,0,0,1,1,1,2,2,3,4,4,5,5,6,6,7,7,8])
j=np.数组([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迭代(i、j、iter、数字):
ii,=np.式中(i==iter)
jj,=np.式中(j[ii]!=数)
尝试:
对于jj中的jjj:
numbers=np.append(numbers,[jjj])
如果iter
如果我的迭代变量超过了I中最高值的长度,我将期望返回。 问题是numpy正在为多重比较操作引发错误:

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

通过在
ii,=
行后面添加一个
打印
,我看到
数字
[-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
的不同而变化


您是否在寻找两个阵列之间的精确匹配?元素方面?二维笛卡尔匹配?

通过在
ii,=
行之后添加
打印,我看到
数字
[-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
的不同而变化


您是否在寻找两个阵列之间的精确匹配?元素方面?二维笛卡尔匹配?

有什么错误
jj,=…
仅在
where
测试1d阵列时有效。那个解包逗号是不可原谅的。
python\uu main\uuu11:DeprecationWarning:elementwise!=比较失败;这将在将来引发错误此时的
数字和
j[ii]
是什么?错误是什么
jj,=…
仅在
where
测试1d阵列时有效。那个解包逗号是不可原谅的。
python\uu main\uuu11:DeprecationWarning:elementwise!=比较失败;这将在将来引发错误
此时的
数字
j[ii]
是什么?对于所有I,我只想从j中取一个唯一的整数。例如,我正在检查i中的0整数,因此我有三个选项可以从j中选择。这将从j中获取0并将其附加到数字中。下一次迭代检查i并得到1,现在它应该在j中寻找一个伙伴,并且0已经被接受,所以我想检查i=1位置的整数,它不是0。等等条件是大于i的最大值。对于所有i,我只想从j中取一个唯一的整数。例如,我正在检查i中的0整数,因此我有三个选项可以从j中选择。这将从j中获取0并将其附加到数字中。下一次迭代检查i并得到1,现在它应该在j中寻找一个伙伴,并且0已经被接受,所以我想检查i=1位置的整数,它不是0。等等条件将大于i的最大值。