我有一个脚本,可以将歌曲转换为numpy数组(librosa
库),将其腌制到db中,然后提取。
我将数组存储在SQLite中,如图there
所示因此,我的脚本会分析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
所以我的问题是这怎么可能?输出顺序为:好,坏,好,坏 怎么了?
P.S。在运行.size方法时显示关键区别:
130
110139750
130
172651500
即使大小必须在100左右。在这种情况下,内置的len()函数也可以正常工作。