编写一个类模板,保存一组序列数据(该序列数据可以是int型、char型或者float型,提示:数据成员是一个一维数组,类型是虚拟类型参数),该类需要实现对序列数据输入、输出、求和、求平均、统计序列个数
时间: 2023-04-30 12:04:15 浏览: 77
题目要求编写一个类模板,保存一组序列数据(该序列数据可以是int、char或float类型,由虚拟类类型参数),提示:数据成员是一个一维数组(该类需要实现对序列数据输入、输出、求和、求平均、统计序列个数等操作)。
相关问题
以下说法正确的是 ()。 A.Python支持的char数据类型 B.Python支持int数据类型 C.Python支持float数据类型 D.Python支持list数据类型
正确的是:
B. Python支持int数据类型
C. Python支持float数据类型
D. Python支持list数据类型
Python确实支持char数据类型,但通常它使用str(字符串)来表示字符序列,而不是单独的char类型。所以选项A不完全准确,而选项B、C和D都是Python内置的数据类型。
def prepare_sequences(notes, num_pitch): # 从midi中读取的notes和所有音符的数量 """ 为神经网络提供好要训练的序列 """ sequence_length = 100 # 序列长度 # 得到所有不同音高的名字 pitch_names = sorted(set(item for item in notes)) # 把notes中的所有音符做集合操作,去掉重复的音,然后按照字母顺序排列 # 创建一个字典,用于映射 音高 和 整数 pitch_to_int = dict((pitch, num) for num, pitch in enumerate(pitch_names)) # 枚举到pitch_name中 # 创建神经网络的输入序列和输出序列 network_input = [] network_output = [] for i in range(0, len(notes) - sequence_length, 1): # 循环次数,步长为1 sequence_in = notes[i:i + sequence_length] # 每次输入100个序列,每隔长度1取下一组,例如:(0,100),(1,101),(50,150) sequence_out = notes[i + sequence_length] # 真实值,从100开始往后 network_input.append([pitch_to_int[char] for char in sequence_in]) # 列表生成式 # 把sequence_in中的每个字符转为整数(pitch_to_int[char])放到network_input network_output.append(pitch_to_int[sequence_out]) # 把sequence_out的一个字符转为整数 n_patterns = len(network_input) # 输入序列长度 # 将输入序列的形状转成神经网络模型可以接受的 network_input = np.reshape(network_input, (n_patterns, sequence_length, 1)) # 输入,要改成的形状 # 将输入标准化,归一化 network_input = network_input / float(num_pitch) # 将期望输出转换成{0,1}布尔矩阵,配合categorical_crossentrogy误差算法的使用 network_output = tf.keras.utils.to_categorical(network_output) # keras中的这个方法可以将一个向量传进去转成布尔矩阵,供交叉熵的计算 return network_input, network_output
这个函数的作用是为神经网络提供要训练的序列。其中,输入的 `notes` 是从 MIDI 文件中读取的音符,`num_pitch` 是所有不同音符的数量。函数将每个长度为 100 的序列作为输入,以该序列后面一个音符作为输出,创建神经网络的输入序列和输出序列。在创建输入序列时,函数使用字典将每个音符映射到一个整数,同时将输入序列进行了标准化。在创建输出序列时,函数使用了 `tf.keras.utils.to_categorical` 方法将期望输出转换成一个布尔矩阵,以供交叉熵的计算。最终,函数返回标准化后的输入序列和期望输出的布尔矩阵。
阅读全文