一共10个类别,如何根据训练集的样本标签划分成10个矩阵,其中样本标签是均为one-hot向量
时间: 2024-03-04 18:48:46 浏览: 53
pytorch、tensorflow之生成one-hot向量
5星 · 资源好评率100%
假设训练集的样本标签存储在一个形状为 (N, 10) 的二维数组 label 中,其中 N 是样本数,10 是类别数,则可以按照以下步骤将训练集划分成 10 个矩阵:
1. 创建一个空字典 dict,用于存储 10 个类别对应的样本索引列表。
2. 遍历训练集中的所有样本,将每个样本的索引加入到对应类别的样本索引列表中。具体实现可以使用 for 循环和 if 语句,例如:
```python
for i in range(N):
c = np.argmax(label[i]) # 取出样本的类别索引
if c not in dict:
dict[c] = [i] # 如果该类别还没有对应的列表,则创建一个新列表
else:
dict[c].append(i) # 将该样本的索引加入到对应类别的列表中
```
其中,`np.argmax(label[i])` 取出样本标签中值为 1 的位置,即该样本的类别索引。
3. 对于每个类别,根据样本索引列表从训练集中提取对应的样本,并存储在一个形状为 (n, m) 的二维数组中,其中 n 是该类别的样本数,m 是每个样本的特征数。具体实现可以使用列表推导式和 numpy 库,例如:
```python
import numpy as np
matrices = [np.array([features[i] for i in dict[c]]) for c in range(10)]
```
其中,`features` 是一个形状为 (N, m) 的训练集特征矩阵,`dict[c]` 表示类别 c 对应的样本索引列表,`[features[i] for i in dict[c]]` 表示从特征矩阵中提取对应样本的特征,`np.array` 将这些特征转换为一个二维数组。最终,`matrices` 中存储了 10 个形状为 (n, m) 的矩阵,分别对应 10 个类别的训练样本。
阅读全文