我在写下面的代码,得到了错误:
TypeError:只有size-1数组可以转换为Python标量
问题出在“if语句和agrmnt变量”,但不知道为什么,因为“agrmnt”变量的类型是int。我不知道为什么我不能在这里使用条件语句。你知道吗
import numpy as np
feature_matrix= np.array([[ 0.1837462, 0.29989789, -0.35889786, -0.30780561, -0.44230703, -0.03043835,
0.21370063, 0.33344998, -0.40850817, -0.13105809],
[ 0.08254096, 0.06012654, 0.19821234, 0.40958367, 0.07155838, -0.49830717,
0.09098162, 0.19062183, -0.27312663, 0.39060785],
[-0.20112519, -0.00593087, 0.05738862, 0.16811148, -0.10466314, -0.21348009,
0.45806193, -0.27659307, 0.2901038, -0.29736505],
[-0.14703536, -0.45573697, -0.47563745, -0.08546162, -0.08562345, 0.07636098,
-0.42087389, -0.16322197, -0.02759763, 0.0297091 ],
[-0.18082261, 0.28644149, -0.47549449, -0.3049562, 0.13967768, 0.34904474,
0.20627692, 0.28407868, 0.21849356, -0.01642202]])
labels = np.array([-1, -1, -1, 1, -1])
T= 10
L= 0.1456692551041303
tta = np.zeros((feature_matrix[0].size)).reshape(-1,1)
tta_0 = 0
for t in range(T):
for i in range(feature_matrix.shape[0]):
agrmnt = np.asscalar(labels[i]*(int(np.dot(feature_matrix[i][np.newaxis], tta)) + tta_0))
if agrmnt<=1:
tta = (1-(L*1/((t+1)**0.5))*tta)+(1/((t+1)**0.5)*
(labels[i]*feature_matrix[i][np.newaxis])))
tta_0 = tta_0 + (labels[i]*1/((t+1)**0.5))
else:
tta = (1-(L*((t+1)**0.5))*tta[np.newaxis].T)
tta_0 = tta_0
print(tta,tta_0)
有人能查一下原因并给我指出正确的方向吗?你知道吗
复制粘贴代码,并更正一个语法错误:
显然,错误在
asscalar
行中。你知道吗将代码更改为:
我明白了
所以它显然在迭代中执行得很好,产生了一个0值;但是下一个循环会导致一个错误。但仔细看这条线,我看到了
int()
。这会产生同样的错误。你知道吗把它拿出来:
现在错误移到
ascalar
(它使用.item()
)。你知道吗在第一次迭代中
temp
是一个(1,1)数组(对于np.dot
并不奇怪)。下一次迭代是(1,10)数组。不能用int
或asscalar
转换成标量的。你知道吗我已经指出了错误的位置和问题。并提出了调试方法。但我不会试图为您解决这个问题-您需要仔细跟踪数组维度。不要试图用
int
和asscalar
命令包装东西。你知道吗最初
tta
是(10,1)数组,但在第一个循环之后是(10,10)。你知道吗相关问题 更多 >
编程相关推荐