我正在将一些MATLAB代码翻译成Python语言。
NumPy中有一个unique(a)命令。但由于MATLAB程序还运行了“rows”命令,因此它会给出略微不同的结果。
在Python中是否有类似的命令,或者我需要编写一个执行相同操作的算法?
假设您的二维数组按照通常的C顺序存储(也就是说,每一行在主数组中被视为一个数组或列表;换句话说,按行优先的顺序),或者您事先对数组进行转置,那么您可以像这样做...
>>> import numpy as np
>>> a = np.array([[1, 2, 3], [2, 3, 4], [1, 2, 3], [3, 4, 5]])
>>> a
array([[1, 2, 3],
[2, 3, 4],
[1, 2, 3],
[3, 4, 5]])
>>> np.array([np.array(x) for x in set(tuple(x) for x in a)]) # or "list(x) for x in set[...]"
array([[3, 4, 5],
[2, 3, 4],
[1, 2, 3]])
unique(a, 'columns')
的操作,只需转置原始数组,执行上述步骤,然后再次转置。ii = 0; wrk_arr = your_arr
idx = numpy.arange(0,len(wrk_arr))
while ii<=len(wrk_arr)-1:
i_list = numpy.arange(0,len(wrk_arr)
candidate = numpy.matrix(wrk_arr[ii,:])
i_dup = numpy.array([0] * len(wrk_arr))
numpy.all(candidate == wrk_arr,axis=1, iout = idup)
idup[ii]=0
i_list = numpy.unique(i_list * (1-idup))
idx = numpy.unique(idx * (1-idup))
wrk_arr = wrk_arr[i_list,:]
ii += 1
your_arr[idx,:] = wrk_arr
它的工作方式类似于MATLAB,因为返回的数组(wrk_arr)保持原始数组(your_arr)的顺序。 idx数组与MATLAB不同,因为它包含第一次出现的索引,而MATLAB返回最后一次出现。
从我的经验来看,在10000 X 4矩阵上,它的速度与MATLAB一样快。
对于列的情况,转置将起到作用。
unique
代替unique1d
——那个帖子里的例子应该可以工作。 - ars