2013-06-16 26 views

Trả lời

-1

Tôi đã gặp phải vấn đề này một lần. Tôi đã làm như sau: không phải là một giải pháp hoàn hảo như một hack tao nhã.

Đầu tiên biến mảng 2d của bạn thành mảng 1D hoặc danh sách có thể băm và từ đó dễ dàng. Một cách để chuyển đổi thành mảng 1D của phao sẽ là lấy sản phẩm dấu chấm với một vector ngẫu nhiên D chiều. ví dụ:

a = np.array([[1.32,1,4],[2,3,3.5],[1.32,1,4],[4,5,6.2]]) 

b = np.random.randint(1,10**20,3) 

c = np.dot(a,b) 
vals, idx = np.unique(c,True) 
1

Bạn có thể đếm số mỗi hàng độc đáo sử dụng lập chỉ mục ưa thích và đánh giá một điều kiện như:

from numpy import unique, array, all 
def myunique(input): 
    u = array([array(x) for x in set(tuple(x) for x in input)]) 
    return u, array([len(input[all(input==x, axis=1)]) for x in u],dtype=int) 

dụ:

a = array([list('1234'), 
      list('1234'), 
      list('1222'), 
      list('1222'), 
      list('1234')],dtype=str) 

print myunique(a) 
#(array([['1', '2', '2', '2'], 
#  ['1', '2', '3', '4']], 
#  dtype='|S1'), array([2, 3])) 
+1

Chỉ cần nghĩ rằng tôi muốn đề cập đến hàm myunique (x) của bạn tham chiếu rõ ràng một ... :) – tantrev

+1

@Trevor, cảm ơn rất nhiều, tôi vừa sửa nó! –

1

Các numpy_indexed gói (từ chối trách nhiệm: Tôi là tác giả của nó) có chức năng thực hiện chính xác điều đó một cách hiệu quả:

import numpy_indexed as npi 
m = np.random.randint(0, 2, (20, 3)) 
unique, count = npi.count(m) 
Các vấn đề liên quan