如何格式化 numpy 数组?

How to format numpy arrays?

我有这样的数据

listL= array([array([-12939613.07220617,   3962855.50690994]),
       array([-12939614.67349505,   3962828.80807231]),
       array([-12939484.00289515,   3962828.1637531 ]),
       array([-12939484.98046737,   3962854.91251931]),

print(type(listL)) -> <class 'numpy.ndarray'>
print(type(listL[0])) -> <class 'numpy.ndarray'>
print(type(listL[0][0])) -> <class 'numpy.float64'>

我有第二条数据,如下所示:

A = array([[ 73.87682896,   8.55827956],
       [ 57.43741519,  10.40224912],
       [ 87.88970753,  75.42971056],

print(type(A)) -> <class 'numpy.ndarray'>
print(type(A[0])) -> <class 'numpy.ndarray'>
print(type(A[0][0])) -> <class 'numpy.float64'>

两组数据的类型相同,但我有一个函数适用于 'A',但不适用于 'listL',我不知道为什么。

A[spatial.KDTree(A).query(coordinate)[1]]

有效,但是

listL[spatial.KDTree(listL).query(coordinate)[1]]

returns错误:

not enough values to unpack (expected 2, got 1)

ListL在某些方面是一种病态结构,它是一个数组的数组,其中需要一个二维数组。

numpy/scipy 竭尽全力优雅地接受大多数可以解释为二维数组的东西,例如,如果你用 KDTree(list(ListL)) 替换 KDTRee(ListL) 就可以了。

为什么有效?因为 list(listL) 的行为类似于大多数 "essentially 2D" 结构(如列表列表等)。我们可以通过arrayasarrayasanyarray等方式发送,得到真正的二维数组

>>> np.array(list(listL))
array([[-12939613.07220617,   3962855.50690994],
       [-12939614.67349505,   3962828.80807231],
       [-12939484.00289515,   3962828.1637531 ],
       [-12939484.98046737,   3962854.91251931]])
>>> np.array(list(listL)).shape
(4, 2)

数组的数组是少数几个仍会导致数组转换机制出错的情况之一:

>>> np.array(listL)
array([array([-12939613.07220617,   3962855.50690994]),
       array([-12939614.67349505,   3962828.80807231]),
       array([-12939484.00289515,   3962828.1637531 ]),
       array([-12939484.98046737,   3962854.91251931])], dtype=object)
>>> np.array(listL).shape
(4,)

我们可以看到,尽管我们尝试转换为普通数组,listL 仍将其形状报告为一维。这似乎是触发您观察到的异常的原因。