Python/Numpy:Division给了我一个意外的弃用警告

Python/Numpy:Division给了我一个意外的弃用警告,python,numpy,types,warnings,Python,Numpy,Types,Warnings,我从csv读取数据,然后循环它,然后我想用平均值除以它来规范化它,但得到一个警告。代码是: A = genfromtxt("train.txt", delimiter=';', skip_header=1) lowid = A[:,1].min(axis=0) highid = A[:,1].max(axis=0) X = [] Y = [] for i in np.arange(lowid, highid): I = A[A[:,1] == i][:, [0,2,3]] me

我从csv读取数据,然后循环它,然后我想用平均值除以它来规范化它,但得到一个警告。代码是:

A = genfromtxt("train.txt", delimiter=';', skip_header=1)
lowid = A[:,1].min(axis=0)
highid = A[:,1].max(axis=0)
X = [] 
Y = []
for i in np.arange(lowid, highid):
    I = A[A[:,1] == i][:, [0,2,3]]
    meanp = np.mean(I[:,1]);
    meanq = np.mean(I[:,2]);

    for j in np.arange(I[:,0].min(axis=0)+2, I[:,0].max(axis=0)):
        weekday = int(I[j,0]) % 7

        # NORMALIZE:
        P   = I[j,1]   / meanp
        pP  = I[j-1,1] / meanp
        ppP = I[j-2,1] / meanp
        X.append([weekday, P, pP, ppP])
        Y.append(I[j,2])
train.txt如下所示:

day;itemID;price;quantity
1;1;4.73;6
1;2;7.23;0
1;3;10.23;1
1;4;17.9;0
1;5;1.81;1
1;6;12.39;1
1;7;7.17;1
1;8;7.03;0
1;9;13.61;0
1;10;36.45;1
1;11;24.67;0
1;12;12.04;0
1;13;11.85;0
for j in range(int(I[:,0].min(axis=0))+2, int(I[:,0].max(axis=0))):     
for j in range(int(I[:,0].min(axis=0))+2, int(I[:,0].max(axis=0))):   
警告:

    weekday = int(I[j,0]) % 7
DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future

    P   = I[j,1]   / meanp
DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future

    pP  = I[j-1,1] / meanp
DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future

    ppP = I[j-2,1] / meanp
DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future

    Y.append(I[j,2])
DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
有什么问题? 谢谢

编辑好吧,我自己的修复速度非常快:
j
必须是整数类型。我是这样修复的:

day;itemID;price;quantity
1;1;4.73;6
1;2;7.23;0
1;3;10.23;1
1;4;17.9;0
1;5;1.81;1
1;6;12.39;1
1;7;7.17;1
1;8;7.03;0
1;9;13.61;0
1;10;36.45;1
1;11;24.67;0
1;12;12.04;0
1;13;11.85;0
for j in range(int(I[:,0].min(axis=0))+2, int(I[:,0].max(axis=0))):     
for j in range(int(I[:,0].min(axis=0))+2, int(I[:,0].max(axis=0))):   

像这样的好办法?我是python新手

好吧,我自己也做了一个很快的修复:
j
必须是整数类型。 我是这样修复的:

day;itemID;price;quantity
1;1;4.73;6
1;2;7.23;0
1;3;10.23;1
1;4;17.9;0
1;5;1.81;1
1;6;12.39;1
1;7;7.17;1
1;8;7.03;0
1;9;13.61;0
1;10;36.45;1
1;11;24.67;0
1;12;12.04;0
1;13;11.85;0
for j in range(int(I[:,0].min(axis=0))+2, int(I[:,0].max(axis=0))):     
for j in range(int(I[:,0].min(axis=0))+2, int(I[:,0].max(axis=0))):   
使用python
range
函数或像这样明确定义
arange
的数据类型(谢谢@davidhm):


这是正确的,但只需在np.arange(…,dtype=np.int)中为j使用原始代码就更简单了。。你应该把它作为答案贴出来。