Python以88位编码钢琴音符-int太大而无法转换为C long

数据挖掘 Python 神经网络
2022-03-08 21:36:38

钢琴键盘有 88 个键: 在此处输入图像描述

我想在 88 位数组中编码一个音符或一个和弦。我这样做,例如: A40000000000000000000000000000000000000000000000000000000001000000000000000000000000000000

接下来,我将此数字转换为十进制。当我有和弦时,最后的数字真的很大。问题是当我将这个大数字从 NumPy 放入数组时,我得到:

note_data = np.array(note_data, dtype=np.int64)
OverflowError: Python int too large to convert to C long

我的意思是将这种数据提供给循环神经网络,或者也许是更好地将音符表示成数字?

编辑:

C3编码注释的另一个例子:

C3 = np.array([0000000000000000000000000001000000000000000000000000000000000000000000000000000000000000], dtype=int)

和错误相同:

OverflowError: Python int too large to convert to C long

有可能减少这个错误吗?

1个回答

这似乎是一种对信息进行编码的糟糕方法。AC 和弦和 C7 和弦将是非常不同的数字,即使它们在概念上相似。

我会接受您的想法,但不要将信息粉碎成单个 int,而是将您的输入设为按照您描述的方式创建的长度为 88 的二进制向量。这样,C 和 C7 将具有相似的输入,仅向量的一个位置不同。

作为从 C 到 B 的简化的一个八度音程示例:

C : [1,0,0,0,1,0,0,1,0,0,0,0]
C7: [1,0,0,0,1,0,0,1,0,0,1,0]

这种编码是利用“虚拟变量”。就像在自然语言处理中经常使用的“词袋”编码。