私は、形状がn×2で長さが2のタプルの配列を持ち、SortedListに転送したいと思います。ですから、長さ2の整数タプルを持つSortedListを作成することです。n×2のnumpy配列から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)
しかし、各エントリが配列である2次元のために、そこには明確な真理値がなく、SortedListのは非協力的である:これは、1次元配列のために正常に動作します
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))
ただし、このソリューションは改善の余地があります。すべての配列をタプルに明示的にアンパックすることなくこの問題を解決する方法を知っている人はいますか?
ありがとう、これは非常に役に立ちました。また、一般的に、これは本当に良い、よく構造化されたうまく書かれた答えです。良い仕事を続けてください:) – m00am