gpt4 book ai didi

python - 如何将整数数组映射到另一个整数

转载 作者:行者123 更新时间:2023-12-03 16:31:47 26 4
gpt4 key购买 nike

我在做一个CNN项目,需要先对label进行预处理。
图像文件是一个频谱图,每个文件都有一个标签,包含 250 个存储在数组中的值。它告诉特定频谱图中存在的一系列音高值。例如,一个标签文件如下所示:

[ 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]
经过我总结 全部 标签文件,我找到了这些 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]
我需要执行 to_categorical在我可以进行 CNN 计算之前确定类号(在我的例子中是 51)的方法。你可以看到 to_categorical文档 here .
我已经做到了,但结果是 86,而不是 51。我假设是因为我的标签已经是整数格式,并且该方法认为我有 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
然后,我想出了一个想法,将所有唯一值映射到一个新整数中,使 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)

关于python - 如何将整数数组映射到另一个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66039265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com