我正在编写一个递归函数来查找索引对。 在我的示例中,向量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)
答案 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
而异。
您是否正在寻找两个数组之间的精确匹配?元素方面?二维笛卡尔比赛?