Python np.where返回一个包含numpy数组的空数组

Python np.where返回一个包含numpy数组的空数组,python,numpy,where,Python,Numpy,Where,我有这个: import numpy as np mol= np.array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20], [21], [22], [23], [24], [25], [26], [27]]) i = np.where(mol == 7) print(i) 但这是回报 (array([], dtype=int64),) 还有,如果我 i = np.wh

我有这个:

import numpy as np

mol= np.array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20], [21], [22], [23], [24], [25], [26], [27]])
i = np.where(mol == 7)
print(i)
但这是回报

(array([], dtype=int64),)
还有,如果我

i = np.where(mol == 7)
还是一样的


有什么问题吗?谢谢大家!

创建带有锯齿列表的numpy数组时,生成的numpy数组将是dtype
object
并包含列表

>>> x = np.array([[1], [1,2]])
>>> x
array([list([1]), list([1, 2])], dtype=object)
您可以通过输入列表清楚地看到相同的结果:

array([list([0, 1, 2, 3, 4]), list([5, 6, 7, 8, 9]),
       list([10, 11, 12, 13, 14]), list([15, 16, 17, 18, 19]), list([20]),
       list([21]), list([22]), list([23]), list([24]), list([25]),
       list([26]), list([27])], dtype=object)
这就是为什么
np。如果
找不到您的值,则无法使用
np搜索列表。如果
。将其与不包含
列表的非锯齿数组进行比较:

x = np.arange(28).reshape(7, -1)

In [21]: np.where(x==7)
Out[21]: (array([1]), array([3]))
如果您想解决这个问题,您可以不使用锯齿阵列,这通常是一个麻烦,或者您可以使用类似
-1
:

top = max([len(i) for i in mol])
mol = np.asarray([np.pad(i, (0, top-len(i)), 'constant', constant_values=-1) for i in mol])

array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, -1, -1, -1, -1],
       [21, -1, -1, -1, -1],
       [22, -1, -1, -1, -1],
       [23, -1, -1, -1, -1],
       [24, -1, -1, -1, -1],
       [25, -1, -1, -1, -1],
       [26, -1, -1, -1, -1],
       [27, -1, -1, -1, -1]])
这将使您能够再次使用
np.where

In [40]: np.where(mol==7)
Out[40]: (array([1]), array([2]))

问题是内部元素是listsA调试提示-打印早期值。你看过mol吗?在
mol==7时
。如果数组太大而无法显示,请至少检查
dtype
shape