我有多次退貨,numpy.unique(a, return_counts=True)不幸的是無法訪問原始陣列。我想將這些結果組合到一個具有唯一值的陣列和一個存盤各自計數的陣列中。我不想通過使用反向創建陣列np.repeat(),因為這些資料對于我的 RAM 來說太大了。
我也找到了 Python collection.Counter,但由于我將結果用作 numpy 陣列,我更愿意留在“numpy 之內”。(除了,你會建議我這樣做嗎?)
有沒有解決這個問題的有效方法?
我想要這樣的東西,而不使用np.repeat():
mmulti_unique_values = np.array([[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]])
multi_unique_counts = np.array([[2,2,2,2],[1,2,3,1],[1,1,2,3],[1,2,2,1]])
values_ravel = multi_unique_values.ravel()
counts_ravel = multi_unique_counts.ravel()
np.unique(np.repeat(values_ravel,counts_ravel), return_counts=True)
> (array([1, 2, 3, 4]), array([5, 7, 9, 7]))
我可以使用 for 回圈實作我想要的結果,但我正在尋找一種(更快)的方法!
all_unique_values, indices_ = np.unique(values_ravel, return_inverse=True)
all_unique_counts = np.zeros(all_unique_values.shape)
for count_index, unique_index in enumerate(indices_):
all_unique_counts[unique_index] = counts_ravel[count_index]
(all_unique_values, all_unique_counts)
> (array([1, 2, 3, 4]), array([5., 7., 9., 7.]))
uj5u.com熱心網友回復:
您可以簡單地申請np.unique獲取具有所有唯一值的陣列,并同時獲取排序陣列中每個專案的位置。然后您可以根據之前的索引累積專案數,以獲得合并的專案數。
all_unique_values, index = np.unique(multi_unique_values, return_inverse=True)
all_unique_counts= np.zeros(all_unique_values.size, np.int64)
np.add.at(all_unique_counts, index, multi_unique_counts.ravel()) # inplace
all_unique_counts
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453058.html
標籤:python-3.x 麻木的 表现 numpy索引
