0

我正在尝试为python中的赋值编写一些代码。我在任何地方都找不到的是什么是错误的以及为什么它不会运行。它是感知和移动机器人定位功能。我不明白为什么这条线不起作用。

q.append(p[i] * (hit * sensor_right + (1 - hit) * (1-sensor_right)))
  • hit = 两个字符串之间的比较。评估结果为真或假,即 1 或 0,对吗?
  • sensor_right = 0.7
Traceback (most recent call last):  
File "vm_main.py", line 26, in <module> import main  
File "/tmp/sbdxfjuois/main.py", line 50, in <module> p = sense(p, measurements[k])
File "/tmp/sbdxfjuois/main.py", line 34, in sense q.append(p[i] * (hit * sensor_right + (1 - hit) * (1-sensor_right)))
TypeError: can't multiply sequence by non-int of type 'float'

你能对我在这里发布的内容提出任何建议吗?

def sense(p, Z):
q = [ ]
for i in range(len(p)):
    hit = (Z == colors[i])
    q.append(p[i] * (hit * sensor_right + (1 - hit) * (1-sensor_right)))
s = sum(q)
for i in range(len(q)):
    q[i] = q[i]/s
return q
4

4 回答 4

2

正如其他人指出的那样,这个p变量显然是一个序列序列。您可以通过放置来验证这一点

print(type(p))
print(type(p[i]))

在追加语句之前。你可能会看到类似的东西

tuple
tuple

如果这是您所期望的,那么您将需要遍历数组的另一个索引。另外,您q是否需要以相同的形状返回?我怀疑你想要更多这样的东西。

def sense(p, Z):
    q = p[:]
    for i in range(len(p)):
        for j in range(len(p[i])):
            hit = (Z == colors[i])
            q[i][j] = (p[i][j] * (hit * sensor_right + (1 - hit) * (1-sensor_right)))
    s = sum(q)
    for i in range(len(q)):
        q[i] = q[i]/s
    return q

请注意,您可能还想查看 numpy 数组。

于 2012-02-27T16:52:13.280 回答
0

这里的问题是其他人所说的。您只能将序列乘以 int,而不能乘以浮点数。例如

>>> [1] * 3
[1, 1, 1]
>>> "f" * 6
ffffff
>>> [1] * 0.7
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'float'

仔细检查 p 的数据类型,以确保它应该是一个序列。如果这确实是 p 应该是的,那么请确保在乘法之前将以下内容转换为 int

(hit * sensor_right + (1 - hit) * (1-sensor_right))
于 2012-02-27T16:48:55.967 回答
0

如果您对其他变量是正确的,它会告诉您这p[i]是一个序列(很可能是一个列表),它不能乘以浮点数。也许p[i]不是你期望的那样?

在引发错误的行之前尝试printing 。p[i]

于 2012-02-27T16:33:15.227 回答
0

与@Mike所说的相关,您还可以执行以下操作:

q = []
sum = 0
for i in p:
    sub_q = []
    for val in i:
        computed_val = val * (hit * sensor_right + (1 - hit) * (1-sensor_right))
        sum += computed_val
        sub_q.append(computed_val)
    q.append(sub_q)

我喜欢这样,因为它更简洁,不必每次调用它时都构建一堆范围,而且它还减少了迭代数据的次数,但对每个数据都是自己的。

于 2012-02-27T18:44:17.993 回答