This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
other:python:misc_by_jyp [2021/10/26 11:42] jypeter [Sorting] Added content |
other:python:misc_by_jyp [2022/02/21 15:15] jypeter [numpy related stuff] |
||
---|---|---|---|
Line 165: | Line 165: | ||
Check the [[https://docs.python.org/3/library/collections.html#collections.OrderedDict|OrderedDict class]] (''from collections import OrderedDict'') and the [[https://realpython.com/python-ordereddict/|OrderedDict vs dict in Python: The Right Tool for the Job]] tutorial | Check the [[https://docs.python.org/3/library/collections.html#collections.OrderedDict|OrderedDict class]] (''from collections import OrderedDict'') and the [[https://realpython.com/python-ordereddict/|OrderedDict vs dict in Python: The Right Tool for the Job]] tutorial | ||
+ | |||
+ | ==== Using sets ==== | ||
+ | |||
+ | [[https://docs.python.org/3/tutorial/datastructures.html#sets|Python sets]] are **groups of unique elements**. They can be used to easily find all the unique elements of //something// and you can easily determine the **intersection**, **union** (and other similar operations) of sets. | ||
==== Printing a readable version of long lists or dictionaries ==== | ==== Printing a readable version of long lists or dictionaries ==== | ||
Line 202: | Line 206: | ||
==== Sorting ==== | ==== Sorting ==== | ||
+ | * When dealing with **numerical values**, you should use the [[https://numpy.org/doc/stable/reference/routines.sort.html|numpy sorting, searching, and counting routines]]! | ||
* [[https://docs.python.org/3/howto/sorting.html|Sorting HOW TO]] | * [[https://docs.python.org/3/howto/sorting.html|Sorting HOW TO]] | ||
* Example: sorting the keys and the values of a dictionary, and then using the ''key'' parameter to sort the keys of a dictionary according to the value associated with the key | * Example: sorting the keys and the values of a dictionary, and then using the ''key'' parameter to sort the keys of a dictionary according to the value associated with the key | ||
Line 216: | Line 221: | ||
['c', 'd', 'b', 'a']</code> | ['c', 'd', 'b', 'a']</code> | ||
+ | ==== numpy related stuff ==== | ||
+ | |||
+ | === Finding and counting unique values === | ||
+ | |||
+ | Use ''np.unique'', do **not** try to use histogram related functions! | ||
+ | |||
+ | <code>>>> vals = np.random.randint(2, 5, (10,)) * 0.5 # Get 10 discreet float values | ||
+ | >>> vals | ||
+ | array([1. , 2. , 1. , 2. , 2. , 1.5, 1. , 1.5, 2. , 1.5]) | ||
+ | |||
+ | >>> np.unique(vals) | ||
+ | array([1. , 1.5, 2. ]) | ||
+ | >>> unique_vals, nb_unique = np.unique(vals, return_counts=True) | ||
+ | >>> unique_vals | ||
+ | array([1. , 1.5, 2. ]) | ||
+ | >>> nb_unique | ||
+ | array([3, 3, 4]) | ||
+ | |||
+ | >>> sorted_vals = np.sort(vals) # Sorted copy, in order to check the result | ||
+ | >>> sorted_vals | ||
+ | array([1. , 1. , 1. , 1.5, 1.5, 1.5, 2. , 2. , 2. , 2. ])</code> | ||
+ | |||
+ | === Applying a ufunc over all the elements of an array === | ||
+ | |||
+ | There are all sorts of //ufuncs// (Universal Functions), and we will just use below ''add'' from the [[https://numpy.org/doc/stable/reference/ufuncs.html#math-operations|math operations]], applied on the arrays defined in [[#finding_and_counting_unique_values|Finding and counting unique values]] | ||
+ | |||
+ | <code># Get the sum of all the elements of 'vals' | ||
+ | >>> np.add.reduce(vals) | ||
+ | 15.5 | ||
+ | >>> np.add.reduce(sorted_vals) | ||
+ | 15.5 | ||
+ | >>> vals.sum() # The usual and easy way to do it | ||
+ | 15.5</code> | ||
/* | /* |