更改Python中的数字范围

更改Python中的数字范围,python,pandas,scipy,Python,Pandas,Scipy,我正在用Python做SVD,我的数据索引范围是150000到160000。正因为如此,SVD变得非常资源密集。如何在维护重复数据的同时将此数据的范围更改为0-10000 Eg: i have consecutive data points :150001,150001,155003,156004,157005 it should map to :1,1,2,3,4 这样范围缩小了,我就不必交给高度稀疏的数据martrix了 我的主要要求是需要将(1691692569453445999

我正在用Python做SVD,我的数据索引范围是150000到160000。正因为如此,SVD变得非常资源密集。如何在维护重复数据的同时将此数据的范围更改为0-10000

Eg: i have consecutive data points   :150001,150001,155003,156004,157005

it should map to  :1,1,2,3,4
这样范围缩小了,我就不必交给高度稀疏的数据martrix了


我的主要要求是需要将(16916925694534459999)等数据转换为(0,0,1,2,3,4)

我为此编写了一个小函数,希望有一种更简单的方法

def range_minimizer():
    ind=0

    for i in d1.index:
        if i==0:
            d1['new_index']=0

        else:
            if d1['movie'][i]==d1['movie'][i-1]:
                d1['new_index'][i]=ind
            else:
                ind+=1
                d1['new_index'][i]=ind  
仅供参考我的数据如下

   user   movie  rating
0     1     169     2.5
1     1    2471     3.0
2     1   48516     5.0
3     2    2571     3.5
4     2  109487     4.0
对数据运行此函数后,我得到最终结果:

   user   movie  rating  ind
0     1     169     2.5    0
1     1    2471     3.0    1
2     1   48516     5.0    2
3     2   48516     3.5    2
4     2  109487     4.0    3

我为此写了一个小函数,我希望有一个更简单的方法来做同样的事情

def range_minimizer():
    ind=0

    for i in d1.index:
        if i==0:
            d1['new_index']=0

        else:
            if d1['movie'][i]==d1['movie'][i-1]:
                d1['new_index'][i]=ind
            else:
                ind+=1
                d1['new_index'][i]=ind  
仅供参考我的数据如下

   user   movie  rating
0     1     169     2.5
1     1    2471     3.0
2     1   48516     5.0
3     2    2571     3.5
4     2  109487     4.0
对数据运行此函数后,我得到最终结果:

   user   movie  rating  ind
0     1     169     2.5    0
1     1    2471     3.0    1
2     1   48516     5.0    2
3     2   48516     3.5    2
4     2  109487     4.0    3

IIUC,您可以在一个系列中使用
rank(method='dense')


IIUC,您可以在一个系列中使用
rank(method='dense')


以下代码按排名顺序记录数字列表中唯一数字的索引:

>>> import numpy as np
>>> v = [169,169,256,945,945,945,345,9999]
>>> np.hstack([0, np.cumsum(np.diff(v)!=0)])
array([0, 0, 1, 2, 2, 2, 3, 4])

请更新问题以反映这些要求。

以下代码按排名顺序记录数字列表中唯一数字的索引:

>>> import numpy as np
>>> v = [169,169,256,945,945,945,345,9999]
>>> np.hstack([0, np.cumsum(np.diff(v)!=0)])
array([0, 0, 1, 2, 2, 2, 3, 4])


请更新问题以反映这些要求。

听起来这里的答案只是“减去150000”。如果您需要有关减法150000的帮助,我们需要查看更多上下文。正如user2357112提到的:
remapped_data=[num-150000 for num in data]
Scipy具有稀疏矩阵函数。im使用sparsesvd,但在将数据传递给它之前,我需要将其转换为稀疏矩阵,这个维度的数据不是这样的。听起来这里的答案只是“减去150000”。如果您需要有关减法150000的帮助,我们需要查看更多上下文。正如user2357112提到的:
remapped_data=[num-150000 for num in data]
Scipy具有稀疏矩阵函数。im使用sparsesvd,但在将数据传递给它之前,我需要将其转换为稀疏矩阵,这个维度的数据不会发生这种情况,嗯?这和你的问题有关吗?150001的资料在哪里?我再给你举一个我数据的例子。虽然数据不同,但要点是相同的。为什么电影栏会改变?你的意思是这样吗?忘了一切吧,我的要求是我需要将(16916925694534459999)转换之类的数据映射为(0,0,1,2,3,4)。就是这样。我想这是假设数据是按电影编号排序的。嗯?这和你的问题有关吗?150001的资料在哪里?我再给你举一个我数据的例子。虽然数据不同,但要点是相同的。为什么电影栏会改变?你的意思是这样吗?忘了一切吧,我的要求是我需要将(16916925694534459999)转换之类的数据映射为(0,0,1,2,3,4)。就是这样。我想这是假设数据是按电影编号排序的。