python简单if else结构错误比较

use*_*856 0 python if-statement python-2.7

这是我的代码

for i,val in enumerate(DS3Y_pred_trans):
    if val < 1.5:
        DS3Y_pred_trans[i] = 1
    else:
        DS3Y_pred_trans[i] = 2
Run Code Online (Sandbox Code Playgroud)

有值小于1.5列表中的值,但out是全部2s.

我错过了什么?

这是整个代码.

from numpy import genfromtxt
DS3X_train = np.genfromtxt('train.csv', dtype=float, delimiter=',')
print DS3X_train

DS3Y_train = np.genfromtxt('train_labels.csv', dtype=int, delimiter=',' )
print DS3Y_train

DS3X_test = np.genfromtxt('test.csv', dtype=float, delimiter=',')
print DS3X_test

DS3Y_test = np.genfromtxt('test_labels.csv', dtype=int, delimiter=',' )
print DS3Y_test

DS3X_train_trans = zip(*DS3X_train)

cov_train = np.cov(DS3X_train_trans)
U, s, V = np.linalg.svd(cov_train, full_matrices=True)
u = U[:,:-1]
u_trans = zip(*u)
DS3X_train_reduced = np.dot(u_trans,DS3X_train_trans) 

b = np.ones((3,2000))
b[1:,:] = DS3X_train_reduced
print "\n"
DS3X_train_reduced = b


DS3X_train_reduced_trans = zip(*DS3X_train_reduced)

temp = np.dot(DS3X_train_reduced,DS3X_train_reduced_trans)

try:
    inv_temp = np.linalg.inv(temp)
except np.linalg.LinAlgError:

    pass
else:

    psue_inv = np.dot(inv_temp,DS3X_train_reduced)
    print psue_inv.shape

weight = np.dot(psue_inv,DS3Y_train)
weight_trans = zip(weight)
print weight_trans



DS3X_test_trans = zip(*DS3X_test)
DS3X_test_reduced = np.dot(u_trans,DS3X_test_trans)

b = np.ones((3,400))
b[1:,:] = DS3X_test_reduced
print "\n"
print b
DS3X_test_reduced = b

print DS3X_test_reduced.shape
DS3X_test_reduced_trans = zip(*DS3X_test_reduced)
DS3Y_pred = np.dot(DS3X_test_reduced_trans,weight_trans)
print DS3Y_pred
print DS3Y_pred.shape 

DS3Y_pred_trans = zip(DS3Y_pred)

print repr(DS3Y_pred_trans[0])

for i,val in enumerate(DS3Y_pred_trans):
    if val < 1.5:
        DS3Y_pred_trans[i] = 1
    else:
        DS3Y_pred_trans[i] = 2


print DS3Y_pred
now regression using indicator variable and graph plottings
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

您的值不是数字.在Python 2中,数字在其他对象之前排序,因此在val与之比较时1.5,比较始终为false.

你可能有字符串:

>>> '1.0' < 1.5
False
>>> 1.0 < 1.5
True
Run Code Online (Sandbox Code Playgroud)

如果是这样,请先将值转换为浮点数:

for i, val in enumerate(DS3Y_pred_trans):
    if float(val) < 1.5:
        DS3Y_pred_trans[i] = 1
    else:
        DS3Y_pred_trans[i] = 2
Run Code Online (Sandbox Code Playgroud)

可能是您仍然在列表中存储其他对象; 你需要采取什么实际上是密切关注列表中,并相应地调整你的代码,修复列表是如何在第一时间创建.

由于您无论如何都要替换所有值,因此可以使用列表推导:

DS3Y_pred_trans = [1 if float(val) < 1.5 else 2 for val in DS3Y_pred_trans]
Run Code Online (Sandbox Code Playgroud)

  • @ user2871856:同样,将来你应该从头开始包含那个样本*,让我们干净地重现你的问题.我不得不根据有限的信息进行猜测,现在我们最终得到了这个*巨大的长*来回了解你究竟做了什么. (2认同)