我正在尝试从文件构建翻译矩阵。该文件如下所示,表示钢琴音符的开始和偏移时间
OnsetTime OffsetTime MidiPitch
0.500004 0.85356 37
1.20712 1.50441 38
1.80171 2.0517 39
...
我试图将其扁平化为钢琴状态表示和事件时间,例如
Event State
time Piano state, array of length 88
...
为此,我构建了以下代码
eventArray = np.array([])
with open('event_log.txt') as tsv:
noteState = [0] * 88
iterator = iter(csv.reader(tsv, dialect="excel-tab"))
next(iterator)
for line in iterator:
notePosition = int(float(line[2])) - 21
noteState[notePosition] = 1
np.concatenate(eventArray, np.array([float(line[0]), noteState]))
noteState[notePosition] = 0
np.concatenate(eventArray, np.array([float(line[1]), noteState]))
但是当我执行此操作时,我收到以下错误
File "main.py", line 32, in <module>
np.concatenate(eventArray, np.array([float(line[0]), noteState]))
ValueError: setting an array element with a sequence.
我应该如何建立这个矩阵?我正在使用numpy切片并根据需要重塑矩阵。
修改
在我现在有评论后尝试了建议
np.concatenate(eventArray, np.array([[float(line[0])], noteState]))
并收到以下错误
Traceback (most recent call last):
File "main.py", line 32, in <module>
np.concatenate(eventArray, np.array([[float(line[0])], noteState]))
TypeError: only integer scalar arrays can be converted to a scalar index
答案 0 :(得分:2)
不要concatenate
迭代。 np.concatenate
每步返回一个新数组。它不会修改数组。
alist = []
with open('event_log.txt') as tsv:
noteState = [0] * 88
iterator = iter(csv.reader(tsv, dialect="excel-tab"))
next(iterator)
for line in iterator:
notePosition = int(float(line[2])) - 21
noteState[notePosition] = 1
alist.append(np.array([float(line[0]), noteState]))
noteState[notePosition] = 0
alist.append(np.array([float(line[1]), noteState]))
那应该创建一个数组列表。如果这些数组的长度都相同,那么
arr = np.array(alist)
应该创建一个2d浮点数组。如果它们的长度不同,我建议
arr = np.concatenate(alist)
制作具有相同值的扁平(1d)数组。
我假设其余代码都是正确的。
打印alist
以验证值是否合理。