0

Pythonで割り当て用のコードを書き込もうとしています。どこにも見つからないのは、何が間違っているのか、なぜ実行されないのかです。感知して動かすロボットの位置特定機能です。この行が機能しない理由がわかりません。

q.append(p[i] * (hit * sensor_right + (1 - hit) * (1-sensor_right)))
  • ヒット = 2 つの文字列の比較。それは、1 または 0 である true または false に評価されますよね?
  • センサー右 = 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

他の変数についてあなたが正しければ、それはp[i]フロートで乗算できないシーケンス (ほとんどの場合リスト) であることを示しています。おそらくp[i]、あなたが期待しているものではありませんか?

エラーをスローする行の前でprintingを試してください。p[i]

于 2012-02-27T16:33:15.227 に答える
0

ここでの問題は、他の人が言ったことです。シーケンスは int でのみ乗算でき、float では乗算できません。例えば

>>> [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

@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 に答える