Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将numpy数组更改为从零开始_Arrays_Python 2.7_Numpy - Fatal编程技术网

Arrays 将numpy数组更改为从零开始

Arrays 将numpy数组更改为从零开始,arrays,python-2.7,numpy,Arrays,Python 2.7,Numpy,我试图找出一种方法,获取一个整数的numpy数组,然后更改条目,使最小的为0,次小的为1,等等 例如 从这个开始 In [13]: a = numpy.array([[1, 2, 10],[1, 2, 99]]) In [14]: a Out[14]: array([[ 1, 2, 10], [ 1, 2, 99]]) 得到这个: array([[ 0, 1, 2], [ 0, 1, 3]]) 我可以开始用numpy.unique()看穿它,例如 似乎

我试图找出一种方法,获取一个整数的numpy数组,然后更改条目,使最小的为0,次小的为1,等等

例如

从这个开始

In [13]: a = numpy.array([[1, 2, 10],[1, 2, 99]])

In [14]: a
Out[14]: 
array([[ 1,  2, 10],
       [ 1,  2, 99]])
得到这个:

array([[ 0,  1, 2],
       [ 0,  1, 3]])
我可以开始用numpy.unique()看穿它,例如


似乎我现在应该能够使用b和c从一个数组转换到另一个数组。但是什么是最好的(也是最快的)方法呢?

不知道最快的方法,但是如果您有可用的
scipy
,您可以使用:


(需要
重塑
,因为它首先将数据展平,
-1
因为它从1开始排列。)

最直接的方法是使用
argsort()


我给你两个选择,第一个看起来更干净:

a = numpy.array([[1, 2, 10],[1, 2, 99]])
uniq, inv = numpy.unique(a, return_inverse=True)
result = inv.reshape(a.shape)
我喜欢这一个,因为它与旧版本的numpy一起工作,而这些版本没有
返回\u反转

a = numpy.array([[1, 2, 10],[1, 2, 99]])
uniq = numpy.unique(a)
result = uniq.searchsorted(a)

如果存在重复的索引,例如
[0,1,1,2]
,这将不起作用。请注意
np.unique
总是返回排序值,因此
u.argsort().argsort()==np.arange(len(u))
@BiRico是正确的,因此您可以使用
ind
并删除最后两行。可能重复的感谢,特别感谢你的补充解释。非常好的解决方案。
a = numpy.array([0, 1, 1, 2])
u, ind = numpy.unique(a, return_inverse = True)
u = u.argsort().argsort()
ret = u[ind]
a = numpy.array([[1, 2, 10],[1, 2, 99]])
uniq, inv = numpy.unique(a, return_inverse=True)
result = inv.reshape(a.shape)
a = numpy.array([[1, 2, 10],[1, 2, 99]])
uniq = numpy.unique(a)
result = uniq.searchsorted(a)