[英]python - how to map array of integer to another integer
我在做一个CNN项目,需要先对label进行预处理。
图像文件是一个频谱图,每个文件都有一个 label 的 250 个值存储在一个数组中。 它讲述了特定频谱图中存在的一系列音高值。 例如,一个 label 文件如下所示:
[ 0 0 0 0 0 0 0 0 0 0 0 57 57 57 57 57 57 57 57 58 58 57 57 57
0 0 0 0 0 56 57 57 56 56 56 56 56 56 56 56 56 57 57 58 59 61 62 62
63 64 64 63 64 64 64 64 0 0 0 0 64 64 64 64 63 63 63 63 63 64 63 64
64 64 65 66 66 66 66 66 65 65 66 66 66 66 65 0 0 0 0 65 65 65 66 66
66 66 66 65 65 65 0 0 0 0 64 64 64 64 64 64 64 64 64 64 64 64 64 64
63 0 0 0 0 0 0 0 0 0 0 0 0 0 60 60 60 60 61 61 62 62 62 62
62 62 62 61 0 0 0 62 62 62 62 62 62 62 62 62 62 62 62 60 0 62 61 60
61 61 61 61 61 61 61 61 61 60 0 0 0 0 0 61 60 60 60 61 61 61 61 61
61 0 0 0 0 0 0 59 59 59 59 58 58 59 59 59 59 0 0 0 0 0 0 0
59 59 58 58 59 59 59 59 59 59 0 0 0 0 58 57 57 57 57 57 57 57 57 57
57 57 58 57 0 0 0 0 0 0]
在总结所有label 文件后,我发现这些标签中存在这51 个唯一值。 我将这些值存储在一个数组中。
y_train = # y_test also contains these values
[ 0 30 31 32 33 34 35 36 37 38
39 40 41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56 57 58
59 60 61 62 63 64 65 66 67 68
69 70 71 72 73 74 76 77 81 83
85]
在进行 CNN 计算之前,我需要执行to_categorical
方法来确定 class 编号(在我的情况下为 51)。 您可以在此处查看to_categorical
文档。
我已经完成了,但结果是 86,而不是 51。我假设是因为我的 label 已经是 integer 格式,并且该方法认为我有 86 个唯一值,范围从 0-85 完整顺序,而实际上我只有 51 个唯一值,范围从 0 到 85,但顺序不完整(请参阅y_train
)。
# convert to array first. y_train and y_test are labels for an image X_train and X_test.
y_train = np.array(y_train) # labels for X_train images
y_test = np.array(y_test) # labels for X_test images
# do to_categorical
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
# shape result
y_train: (638, 250, 86) # 638 = total data, 250 = 1 data length, 86 = num_class
y_test: (161, 250, 86) # 161 = total data, 250 = 1 data length, 86 = num_class
然后,我想出了一个想法,将 map 的所有唯一值放入一个新的 integer 以使to_categorical
方法认为我只有 51 个 class,例如:
0 -> 0
30 -> 1
31 -> 2
32 -> 3
...
85 -> 51
Python 有没有办法从y_train
数组实现这种映射? 如果有,我可以在计算完成后将其恢复为原始值吗? 谢谢你。
是的,您可以制作所有这些映射的字典,如下所示
map_dict = {}
for i, value in enumerate(y_train):
map_dict[i] = value
您的新类别将是 map_dict 的键,您可以如下所示
list(map_dict.keys())
以后每当您必须回顾原始值时,您只需要检查 map_dict 就像
map_dict[k]
要打印字典中的键和值,请执行以下操作,
for key, value in map_dict.items():
print(key, ' --->', value)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.