X = np.array(X_list),把x降到二维数组
时间: 2024-02-13 22:01:34 浏览: 131
你可以使用 `numpy` 库中的 `reshape()` 函数将一个多维数组降到二维数组。假设你的 `X_list` 是一个三维数组,你可以使用以下代码将其降到二维数组:
```python
import numpy as np
# 将 X_list 降到二维数组
X = np.array(X_list)
X = X.reshape(X.shape[0], -1)
```
这里的 `reshape()` 函数的第一个参数是新数组的第一维大小,也就是样本数量,这里使用了 `-1` 表示自动计算。第二个参数是新数组的第二维大小,这里使用了 `-1` 表示自动计算。这样,`X` 就是一个二维数组,每一行是一个样本,每一列是一个特征。
相关问题
x_note = [] x_offset = [] for press_time_dict in midi_list: last_offset = Fraction(0, 1) sorted_keys = sorted(press_time_dict.keys(), key=lambda t: float(Fraction(t))) for i, key in enumerate(sorted_keys): note_arr = np.zeros(shape=(len(total_keys), len(duration_keys)), dtype=np.float32) for note, duration in press_time_dict[key]: note_arr[total_keys.index(note), duration_keys.index(duration)] = 1. note_arr[np.max(note_arr, axis=-1) == 0., duration_keys.index('0')] = 1. cur_offset = Fraction(key) x_offset.append(str(cur_offset - last_offset)) last_offset = cur_offset x_note.append(note_arr) x_note = np.stack(x_note, axis=0) offset_keys = list(set(x_offset)) x_offset_idx = np.array([offset_keys.index(offset_type) for offset_type in x_offset]) x_offset = np.eye(len(offset_keys), dtype=np.int32)[x_offset_idx] x_offset = np.array(x_offset, dtype=np.float32) np.save("notes_array.npy", x_note) np.save("offsets_array.npy", x_offset) np.save("note_keys_dict.npy", total_keys) np.save("note_offsets_dict.npy", offset_keys) np.save("note_durations_dict.npy", duration_keys)
这段代码的作用是将`midi_list`列表中的所有键值对转换为神经网络的输入格式。具体来说,它将每个键值对转换为一个二维数组,其中每行表示一个音符,每列表示一个持续时间。对于每个键值对,它还将其对应的偏移量记录在`x_offset`列表中。
在代码的第一部分中,它遍历`midi_list`中的每个键值对,并按照键的顺序将其排序。然后,它遍历排序后的键,并将其转换为一个二维数组。对于每个音符,它使用`total_keys`和`duration_keys`中的索引来确定其在数组中的位置,并将该位置的值设置为1。如果一个音符在该键值对中没有出现,则该位置的值为0。对于每个键值对,它还将持续时间为0的音符设置为1,以使这些音符可以被正确地处理。
在代码的第二部分中,它使用`x_offset`列表中的偏移量将每个键值对与其之前的键值对分开。然后,它将`x_note`和`x_offset`转换为NumPy数组,并将它们保存在`.npy`文件中。最后,它将`total_keys`、`offset_keys`和`duration_keys`保存为`.npy`文件,以便在模型训练过程中使用。
inputs = np.array(input_list, ndmin=2).T
这行代码是将一个包含多个输入的列表(input_list)转换为一个 NumPy 数组,并将其转置。这样做是为了将输入转换为列向量,以便与神经网络的权重矩阵进行矩阵乘法运算。
具体来说,ndmin=2 表示将数组的最小维度设置为 2,即使输入列表只包含一个元素也会创建一个二维数组。 .T 表示对数组进行转置操作,将行向量转换为列向量。
举个例子,如果 input_list = [1, 2, 3],那么 np.array(input_list, ndmin=2).T 将会返回一个形状为 (3, 1) 的二维数组,即:
```
array([[1],
[2],
[3]])
```
阅读全文