У меня есть скрипт, который превращает песни в массивы (библиотека librosa
), выбирает их в БД и извлекает позже.
Я храню массивы в SQLite, как показано там
Итак, мой скрипт анализирует 4 разные папки с рэп, рок, поп и электро песнями, по 100 ~ файлов в каждой.Одна и та же функция используется для каждой папки:
def insert(self, genre, data):
conn = sqlite3.connect(DATABASE_FILE,
detect_types=sqlite3.PARSE_DECLTYPES)
curs = conn.cursor()
curs.execute(f"""insert into {genre} values(?)""", (data,))
conn.commit()
conn.close()
Но когда я вывожу эти массивы, они все выглядят по-разному.Рэп и поп-музыка показаны одним способом (как мне нужно), а рок и электро - другим.Пример:
Способ, который мне не нужен:
[[[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 2.54755225e-02
1.35376751e-01 -7.20393434e-02]]
[[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... -2.36755103e-01
-1.50851190e-01 -1.60914958e-01]]
[[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... -9.19092745e-02
-7.79412016e-02 -5.93096465e-02]]
...
Способ, который мне нужен:
[[array([-1.3420450e-05, -1.2423131e-05, -1.5018032e-05, ...,
-3.0817756e-01, -2.4027914e-01, -2.3190670e-01], dtype=float32)]
[array([ 0. , 0. , 0. , ..., -0.7026442 ,
-0.67226726, -0.7215703 ], dtype=float32)]
[array([0. , 0. , 0. , ..., 0.06976765, 0.22147852,
0.11491765], dtype=float32)]
[array([0. , 0. , 0. , ..., 0.22524872, 0.1910718 ,
0.2159081 ], dtype=float32)]
Мой метод извлечения:
def execute(self, genre):
conn = sqlite3.connect(DATABASE_FILE,
detect_types=sqlite3.PARSE_DECLTYPES)
curs = conn.cursor()
curs.execute(f'''select arr from {genre}''')
data = curs.fetchall()
conn.close()
return data
Итак, мой вопрос: как это возможно?Порядок вывода: хороший, плохой, хороший, плохой Что не так?
PS разница во время работы отображается. Метод размера:
130
110139750
130
172651500
Даже если размер должен быть около100. Встроенная функция len () в этом случае работает как положено.