首页 > 解决方案 > 如何迭代多个向量和矩阵并返回单个值?

问题描述

我正在尝试创建一个迭代行的函数

def function:
    n, d = xs.shape    
    w = np.zeros(d)
    b = 0.0

    while True:
        m = 0
        for i in xs:
            for j in ys:
                if j * (w.T @ i + b) <= 0:
                    w += function2(i,j,w)
                    b += j
                    m += 1
              
    if m == 0:
        break

return (w,b)

N = 100;
d = 10;
xs = np.random.rand(N,d)
w = np.random.rand(1,d)
ys = np.sign(w.dot(xs.T))[0]
b = 0
w, b = perceptron(xs,ys)

但我收到以下错误:

     22         for i in xs:
     23             for j in ys:
---> 24                 if j * (w.T @ i + b) <= 0:
     25                     w += function(i,j,w)
     26                     b += ys

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我相信这是因为 if j * (wT @ i + b) <= 0: 行正在返回一个向量而不是单个值。但是,当我在函数之外尝试这行代码时,它返回一个值:

test = ys[0] * (w2.T @ xs[0] + b)           
print(test)

返回 0.0。为什么它会在这里返回一个值,但在我的函数中返回一个向量?

标签: pythonnumpy

解决方案


你有没有尝试过:

   for i in xs:
        for j in ys:
            print(i)
            print(j)
            print( j * (w.T @ i + b))

这就是我必须做的测试和回答你的问题。我想我可以尝试在我的脑海中“运行”它,但我感觉很懒:)


推荐阅读