如何格式化 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" 结构(如列表列表等)。我们可以通过array
或asarray
或asanyarray
等方式发送,得到真正的二维数组
>>> 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
仍将其形状报告为一维。这似乎是触发您观察到的异常的原因。
我有这样的数据
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" 结构(如列表列表等)。我们可以通过array
或asarray
或asanyarray
等方式发送,得到真正的二维数组
>>> 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
仍将其形状报告为一维。这似乎是触发您观察到的异常的原因。