[Numpy-discussion] Finding the same value in List
Happyman
bahtiyor_zohidov@mail...
Wed Apr 17 05:05:43 CDT 2013
Okay Todd,
In both results, I got the proper values.. for me indices are important also counting.
From your code:
let's say function--> sort_out(data):
x , f = sort_out( data )
The data type:
x in ndarray and x[ i ]--> int64
type(f) --> ' list '
type( f[ 0 ] ) --> ' tuple '
type( f[ 0][0] ) --> 'ndarray'
type( f[ 0 ][ 0 ][ 0] ) --> 'int64'
How do you think to avoid diversity if data type in this example? I think it is not necessary to get diverse dtype as well as more than 1D array..
??
Среда, 17 апреля 2013, 11:53 +02:00 от Sebastian Berg <sebastian@sipsolutions.net>:
>On Wed, 2013-04-17 at 13:32 +0400, Happyman wrote:
>> Hi Todd,
>> Greaaat thanks for your help.. By the way, the first one (I think) is
>> much simpler.. I tested it and ,of course, it is 1D, but it is also a
>> good idea to consider it for Ndimensional.
>> I prefer the first one! Do you you think first version is okay to
>> use?
>
>If you are only interested in the count, using np.bincount should be
>much faster then the list comprehension with "==". Of course that gives
>you a count of zero for all indexes that do not exist. But even then I
>very much expect that filtering those out afterwards will be faster
>unless your "indexes" can be arbitrary large. Of course bincount loses
>the order information, so if you need that, you can only replace the
>second step with it.
>
>- Sebastian
>>
>>
>> Среда, 17 апреля 2013, 11:02 +02:00 от Todd < toddrjen@gmail.com >:
>> On Wed, Apr 17, 2013 at 10:46 AM, Todd < toddrjen@gmail.com >
>> wrote:
>> x,i=numpy.unique(y, return_inverse=True)
>>
>> f=[numpy.where(i==ind) for ind in range(len(x))]
>>
>>
>>
>>
>>
>>
>>
>> A better version would be (np.where returns tuples, but we
>> don't want tuples):
>>
>> x,i=numpy.unique(y, return_inverse=True)
>> f=[numpy.where(i==ind)[0] for ind in range(len(x))]
>>
>> You can also do it this way, but it is much harder to read
>> IMO:
>>
>> x=numpy.unique(y)
>> f=numpy.split(numpy.argsort(y),
>> numpy.nonzero(numpy.diff(numpy.sort(y)))[0]+1)
>>
>>
>> This version figures out the indexes needed to put the values
>> of y in sorted order (the same order x uses), then splits it
>> into sub-arrays based on value. The principle is simpler but
>> the implementation looks like clear to me.
>>
>>
>> Note that these are only guaranteed to work on 1D arrays, I
>> have not tested them on multidimensional arrays
>>
>>
>>
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion@scipy.org
>> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>>
>>
>>
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion@scipy.org
>> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>
>_______________________________________________
>NumPy-Discussion mailing list
>NumPy-Discussion@scipy.org
>http://mail.scipy.org/mailman/listinfo/numpy-discussion
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/numpy-discussion/attachments/20130417/72c4084e/attachment.html
More information about the NumPy-Discussion
mailing list