#python
Вопрос:
Я пытаюсь преобразовать ускоренные данные в гравитацию, но в строке 5 появляется ошибка»не удается умножить последовательность на не-int типа «float»»
1. l = []
2. for i in df3.values:
3. m = []
4. for x in i:
5. x = ((2*8)/(pow(2,14)))*x
6. m.append(x)
7. l.append(m)
8. df3 = pd.DataFrame(l)
9. print(df3)
файл csv содержит данные ускорения (вектор x, y, z) в битах, и я пытаюсь преобразовать их в ускорение,
пример:
76,-697,-279
15,-174, -90
-53,-568,-306
48,-675,-254
1,-176, -81
-84,-613,-271
-2,-668,-221
-10,-180, -77
Комментарии:
1. почему вы используете одну и ту же переменную для своего итератора
for x in i
, а затем используете ее для присвоения ей некоторых значений? (и умножьте на это)2. вы, вероятно, захотите использовать
numpy.array
для своих промежуточных массивов не собственный список Python, который не будет хорошо себя вести с такими вещами, как умножение (где он создает мягкие копии).3. Зачем пересчитывать эти константы? Это не так дорого, но все же, почему бы просто не использовать
0.0009765625
? Кроме того, что именно ты пытаешься сделать? Вы явно применяете какие-то вычисления к фрейму данных. Можете ли вы предоставить нам образец фрейма данных? Я не вижу причин использовать здесь вложенный цикл for.4. Вы пытаетесь получить величину векторов ускорения?
Ответ №1:
Делая некоторые предположения, возможно, у вас есть данные акселерометра, как здесь
Вместо использования цикла вы можете сделать это напрямую с помощью векторизованной математики
df = df.assign(gravity=(df["source"] / 1024))
>>> df = pd.DataFrame({'source': [200, 10000, 20000, 900]})
>>> df.assign(gravity=df['source']/1024)
source gravity
0 200 0.195312
1 10000 9.765625
2 20000 19.531250
3 900 0.878906
Комментарии:
1. Почему бы просто не разделить на 1024?
2. ах, промежуточная математическая оплошность
Ответ №2:
Не совсем понятно, о чем вы просите, но, похоже, вам нужна величина этих векторов ускорения? В таком случае используйте df.apply(np.linalg.norm, axis=1)
, вот так:
In [3]: df
Out[3]:
x y z
0 76 -697 -279
1 15 -174 -90
2 -53 -568 -306
3 48 -675 -254
4 1 -176 -81
5 -84 -613 -271
6 -2 -668 -221
7 -10 -180 -77
In [4]: df.apply(np.linalg.norm, axis=1)
Out[4]:
0 754.603207
1 196.471372
2 647.355389
3 722.803569
4 193.747258
5 675.474648
6 703.611398
7 196.033160
dtype: float64