簡體   English   中英

使用scipy數組設置操作

[英]Set operations with scipy arrays

Python有一個非常好的“設置”數據結構,它基本上是一個無序列表,可以進行設置操作。 我可能會出於以下目的而使用這種數據結構:

我從調查中獲得了一組數據點(每個點是一個由兩個元素組成的Scipy / numpy數組),可以根據受訪者的性別和婚姻狀況將其分為不同的子集。

不幸的是, Python集合似乎不允許所謂的可變對象,例如numpy arays和list 我可以使用元組作為數據點,但是我想知道是否有更好的方法可以做到這一點。

理想情況下,我希望有幾個我可以相交,合並等的無序數據點列表(集合)。-我可以對其進行迭代(遍歷各個數據點以及用於繪圖目的的集合列表)。

所以我的問題是:在這種情況下,使用元組集是我想要做的唯一方法嗎? 在Python中真的不可能有可變元素集(例如numpy數組)嗎?

python-sets必須在python中可哈希 因此,您可以定義一個class datapoint並根據其元素實現__hash__(self)__eq__(self)並將其實例添加到您的集合中。

或者,也許您想使用一個命名的元組 我沒有測試它們,但是它們也實現了__hash____eq__ 它們仍然是元組,但至少可以以更具可讀性的方式訪問它們。

可變對象集是一個復雜的概念。 什么應該

a = set([]); 
a.add (object1);
a.add (object2);
object3 = object1;
object1 = object2;
object1 = object3;
print (len(a));

打印? 您可以說該集合在相等時應該將object1和object2折疊起來,但這基本上是無法實現的。 print(len(a))放在中間不應更改--len應該是一個純函數-但這意味着set必須存儲多個對象並確定對它們進行操作時哪個對象是相同的他們。 當然

print (len(a))
object1 = object3
print (len(a))

打印1 2也有點令人驚訝。 高效且具有合理語義的可變對象集很難實現,這就是Python不嘗試的原因。

編輯:然后嘗試

a = set([])
a.add (mutable_array([1,2]));
a.add (mutable_array([1,3]));
for i in a:
     i[1] = 2
print (len(a));

關鍵是:如果將可變對象粘貼到集合中,則該集合將以重復項結尾,或者該集合將必須跟蹤它們中發生的變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM