I have two numpy array, I want to remove duplicate values from the first array (including the original value) and remove the items in the matching positions in the second array.
For example:
a = [1, 2, 2, 3]
b = ['a', 'd', 'f', 'c']
Becomes:
a = [1, 3]
b = ['a', 'c']
I need to do this efficiently and not use the naive solution which is time consuming
Here's one with np.unique -
unq,idx,c = np.unique(a, return_index=True, return_counts=True)
unq_idx = np.sort(idx[c==1])
a_out = a[unq_idx]
b_out = b[unq_idx]
Sample run -
In [34]: a
Out[34]: array([1, 2, 2, 3])
In [35]: b
Out[35]: array(['a', 'd', 'f', 'c'], dtype='|S1')
In [36]: unq,idx,c = np.unique(a, return_index=1, return_counts=1)
...: unq_idx = idx[c==1]
...: a_out = a[unq_idx]
...: b_out = b[unq_idx]
In [37]: a_out
Out[37]: array([1, 3])
In [38]: b_out
Out[38]: array(['a', 'c'], dtype='|S1')
Since you are open to NumPy, you may wish to consider Pandas, which uses NumPy internally:
import pandas as pd
a = pd.Series([1, 2, 2, 3])
b = pd.Series(['a', 'd', 'f', 'c'])
flags = ~a.duplicated(keep=False)
idx = flags[flags].index
a = a[idx].values
b = b[idx].values
Result:
print(a, b, sep='\n')
array([1, 3], dtype=int64)
array(['a', 'c'], dtype=object)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With