Hello all,
I would be grateful for your advice regarding something I tried to do using unique() but it didn't work.
I have a two dimensional numpy array that looks like that (but much larger):
>>> pop_A1
array([[10, 2, 10],
[10, 9, 10],
[10, 9, 10],
[10, 9, 10],
[10, 9, 10],
[22, 9, 10],
[10, 9, 10],
[10, 9, 10],
[10, 9, 10],
[10, 9, 10]])
From that I need to create a unique list (or array), specifying unique vectors and how many of each of them are there. So for example, I have here 3 unique vectors which are [10, 2, 10], [10, 9, 10] and [22, 9, 10]. The first vector appears one time, the second appears 8 times, and the third appear one time, so I would like my output be something like:
[10, 2, 10] 1
[10, 9, 10] 8
[22, 9, 10] 1
When I use unique() it seems to "flatten" the two dimensional array, and I only get:array([ 2, 9, 10, 22]).
Many thanks for any suggestion!

2
Contributors
2
Replies
3
Views
8 Years
Discussion Span
Last Post by uv2009

You can use a dictionary as a counter, but you first have to convert the key to a tuple.

``````arr=[[10, 2, 10],
[10, 9, 10],
[10, 9, 10],
[10, 9, 10],
[10, 9, 10],
[22, 9, 10],
[10, 9, 10],
[10, 9, 10],
[22, 9, 10],
[10, 9, 10]]

unique_dict = {}
for x in arr:
## convert to a tuple so it is hashable
y = tuple(x)
if y not in unique_dict:
unique_dict[y] = 0
unique_dict[y] += 1

print unique_dict``````

Edited by woooee: n/a

Thanks a lot woooee, it works great!

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.