python - 如何迭代多个向量和矩阵并返回单个值?
问题描述
我正在尝试创建一个迭代行的函数
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。为什么它会在这里返回一个值,但在我的函数中返回一个向量?
解决方案
你有没有尝试过:
for i in xs:
for j in ys:
print(i)
print(j)
print( j * (w.T @ i + b))
这就是我必须做的测试和回答你的问题。我想我可以尝试在我的脑海中“运行”它,但我感觉很懒:)
推荐阅读
- vb.net - 在 VB.net 中使用 Linq 获取节点的所有子节点
- javascript - Firebase Google 身份验证 - 检查用户是否首次登录
- grails - 如何强制 Grails GORM 从数据库中检索信息(.refresh() 不起作用)
- css - 如何在 JFoenix 时间选择器中编辑小时和分钟单元格
- java - java - 为什么Java中递增和递减的运算符优先级和关联性无法正常工作?
- mysql - AWS Lambda 和 RDS 工作示例(需要它与 Sequelize 一起使用)
- javascript - 使用 Regex JS 删除字符串中的重复单词
- android - 使用 Mockito 测试最小的实时数据视图模型
- java - Java将差异数组转换为变量
- python - Virtutalenv 命令“python setup.py egg_info”失败,错误代码为 1