Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy.where产生不一致的结果_Python_Arrays_Numpy - Fatal编程技术网

Python numpy.where产生不一致的结果

Python numpy.where产生不一致的结果,python,arrays,numpy,Python,Arrays,Numpy,我有一段代码,需要在numpy数组中查找值的索引。 对于这个任务,我使用numpy.where。 问题是,当我确定搜索的值在数组中时,numpy.where会生成错误的结果,即返回空数组。 更糟糕的是,我测试了元素是否真的在带有for循环的数组中,如果找到了它,还可以使用numpy.where查找它。 奇怪的是,它会找到一个结果,而实际上,一行之后,它不会 下面是代码的外观: # progenitors, descendants and progenitor_outputnrs are 2D-a

我有一段代码,需要在numpy数组中查找值的索引。 对于这个任务,我使用numpy.where。 问题是,当我确定搜索的值在数组中时,numpy.where会生成错误的结果,即返回空数组。 更糟糕的是,我测试了元素是否真的在带有for循环的数组中,如果找到了它,还可以使用numpy.where查找它。 奇怪的是,它会找到一个结果,而实际上,一行之后,它不会

下面是代码的外观:

# progenitors, descendants and progenitor_outputnrs are 2D-arrays that are filled from reading in files.
# outputnrs is a 1d-array.

ozi = 0
for i in range(descendants[ozi].shape[0]):
    if descendants[ozi][i] > 0:

        if progenitors[ozi][i] < 0:
            oind = outputnrs[0] - progenitor_outputnrs[ozi][i] - 1
            print "looking for prog", progenitors[ozi][i], "with outputnr", progenitor_outputnrs[ozi][i], "in", outputnrs[oind]

            for p in progenitors[oind]:
                if p == -progenitors[ozi][i]:
# the following line works...
                    print "found", p, np.where(progenitors[oind]==-progenitors[ozi][i])[0][0]
# the following line doesn't!
            iind = np.where(progenitors[oind]==-progenitors[ozi][i])[0][0]
#子体、子体和子体输出nr是通过读取文件填充的二维数组。
#outputnrs是一个一维数组。
ozi=0
对于范围内的i(子体[ozi]。形状[0]):
如果[ozi][i]>0:
如果祖细胞[ozi][i]<0:
oind=输出NRS[0]-祖细胞\输出NRS[ozi][i]-1
打印“查找程序”,祖程序[ozi][i],“带输出编号”,祖程序[ozi][i],“输入”,输出编号[oind]
对于祖细胞中的p[oind]:
如果p==-祖细胞[ozi][i]:
#下面这句话很有用。。。
打印“已找到”,p,np.其中(祖细胞[oind]==-祖细胞[ozi][i])[0][0]
#下面这行不行!
iind=np.其中(祖细胞[oind]==-祖细胞[ozi][i])[0][0]
我得到输出:

looking for prog -76 with outputnr 65 in 66
found 76 79
looking for prog -2781 with outputnr 65 in 66
found 2781 161
looking for prog -3797 with outputnr 63 in 64
found 3797 163
looking for prog -3046 with outputnr 65 in 66
found 3046 163
looking for prog -6488 with outputnr 65 in 66
found 6488 306
Traceback (most recent call last):
  File "script.py", line 1243, in <module>
    main()
  File "script.py", line 974, in main
    iind = np.where(progenitors[oind]==-progenitors[out][i])[0][0]
IndexError: index 0 is out of bounds for axis 0 with size 0
正在寻找66中输出为65的prog-76
发现76 79
正在寻找prog-2781,66中的输出为65
发现2781161
正在寻找prog-3797,64中的输出为63
发现3797163
正在寻找prog-3046,66中的输出为65
发现3046163
正在寻找prog-6488,66中的输出为65
发现6488306
回溯(最近一次呼叫最后一次):
文件“script.py”,第1243行,在
main()
文件“script.py”,第974行,在main中
iind=np.其中(祖细胞[oind]==-祖细胞[out][i])[0][0]
索引器错误:索引0超出大小为0的轴0的界限
我使用python 2.7.12和numpy 1.14.2


有人知道为什么会发生这种情况吗?

where(cond)
cond
中找到真正的元素。如果为空,则
cond
全部为假。确保平等测试是正确的。测试浮动是很棘手的。@hpaulj我使用完全相同的一段代码,
np。其中(progenitors[oind]==-progenitors[ozi][I])[0][0]
在行和行中都有效。因此,一旦
cond
得到满足,后面的一行都是假的。此外,这些都是整数数组。你必须缩进最后一行才能确认“下面执行的是同一行”,因为只有当
为真时,上面一行才会运行,而最后一行即使为假也会执行。@heltonbiker很公平,我这样做了,在同一点上仍然有相同的错误消息。如果您提供了一个只需将其复制到文件并运行即可运行的错误消息,则会更容易为您提供帮助。也就是说,使用演示问题的示例数据创建一个自包含的可运行脚本。(如果您这样做,您很有可能自己发现问题!)