Python 如何使用numpy where函数编写递归搜索?
我正在写一个递归函数来查找索引对。 在我的例子中,向量i和j是矩阵的非零元素的i和j指数 现在我想找到“唯一”的索引对,这样我就可以按对角线形式对矩阵进行排序。或者至少消除零元素 我用numpy写了一个函数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
将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的最大值。