Constructing a Python set from a Numpy matrix

前端 未结 6 1089
面向向阳花
面向向阳花 2020-12-06 00:17

I\'m trying to execute the following

>> from numpy import *
>> x = array([[3,2,3],[4,4,4]])
>> y = set(x)
TypeError: unhashable type: \'num         


        
6条回答
  •  一个人的身影
    2020-12-06 00:40

    If you want a set of the elements, here is another, probably faster way:

    y = set(x.flatten())
    

    PS: after performing comparisons between x.flat, x.flatten(), and x.ravel() on a 10x100 array, I found out that they all perform at about the same speed. For a 3x3 array, the fastest version is the iterator version:

    y = set(x.flat)
    

    which I would recommend because it is the less memory expensive version (it scales up well with the size of the array).

    PPS: There is also a NumPy function that does something similar:

    y = numpy.unique(x)
    

    This does produce a NumPy array with the same element as set(x.flat), but as a NumPy array. This is very fast (almost 10 times faster), but if you need a set, then doing set(numpy.unique(x)) is a bit slower than the other procedures (building a set comes with a large overhead).

提交回复
热议问题