我有一个形状为 n×2 的 numpy 数组,一堆长度为 2 的元组,我想将其转移到 SortedList。所以目标是创建一个长度为 2 的整数元组的 SortedList。
问题是 SortedList 的构造函数检查每个条目的真值。这适用于一维数组:
In [1]: import numpy as np
In [2]: from sortedcontainers import SortedList
In [3]: a = np.array([1,2,3,4])
In [4]: SortedList(a)
Out[4]: SortedList([1, 2, 3, 4], load=1000)
但是对于二维来说,当每个条目都是数组时,没有明确的真值,SortedList 是不合作的:
In [5]: a.resize(2,2)
In [6]: a
Out[6]:
array([[1, 2],
[3, 4]])
In [7]: SortedList(a)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-7-7a4b2693bb52> in <module>()
----> 1 SortedList(a)
/home/me/miniconda3/envs/env/lib/python3.6/site-packages/sortedcontainers/sortedlist.py in __init__(self, iterable, load)
81
82 if iterable is not None:
---> 83 self._update(iterable)
84
85 def __new__(cls, iterable=None, key=None, load=1000):
/home/me/miniconda3/envs/env/lib/python3.6/site-packages/sortedcontainers/sortedlist.py in update(self, iterable)
176 _lists = self._lists
177 _maxes = self._maxes
--> 178 values = sorted(iterable)
179
180 if _maxes:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我目前的解决方法是手动将每一行转换为一个元组:
sl = SortedList()
for t in np_array:
x, y = t
sl.add((x,y))
但是,该解决方案提供了一些改进空间。有谁知道如何在不将所有数组显式解包成元组的情况下解决这个问题?