python - 具有不同数据类型的 Numpy 数组表现得很奇怪

标签 python numpy machine-learning

我正在尝试使用 music21 python 模块从 MIDI 文件中提取数据。我遇到的问题是当我尝试从 n 元组的音符(例如第 32 个音符三元组)获取音符持续时间的数据时。该模块通常以四分音符长度的分数形式返回音符长度(例如四分音符为 1.0,八分音符为 0.5 等)。但是,对于三元组,它返回一个 python Fraction 对象(例如 Fraction(1, 12))。我有以下循环:

for note in notes_from_stream:
    temp_arr = []
    temp_arr.append(get_midi_representation(note))
    temp_arr.append(note.duration.dots)
    temp_arr.append(note.duration.quarterLength)
    tup = float(note.duration.quarterLength.numerator) / (note.duration.quarterLength.denominator)
    temp_arr.append(tup)

    note_list_arr.append(temp_arr)

temp_arr 在每次迭代结束时添加到 note_list_arr 中。循环完成后,我使用 numpy.asarray() 函数从 note_list_arr 创建一个新的 2x2 numpy 数组。所以,实际的问题是,在所有数据都在 numpy 数组中之后,我得到了以下内容:

[[128 0 Fraction(1, 12) 0.08333333333333333]
[128 0 Fraction(1, 24) 0.041666666666666664]]

问题在于它包含 Fraction 对象,但是如果我删除将其放在那里的行 (temp_arr.append(note.duration.quarterLength) 并只留下计算的那一行分数的实数值,我得到以下结果:

[[  1.28000000e+02   0.00000000e+00   8.33333333e-02]
[  1.28000000e+02   0.00000000e+00   4.16666667e-02]]

数组中的所有值都转换为带有指数表示法的 float 。我怎样才能避免这种情况?

最佳答案

dtype 的用途是什么

[[128 0 Fraction(1, 12) 0.08333333333333333]
 [128 0 Fraction(1, 24) 0.041666666666666664]]

我猜是对象。每个元素都是指向不同类型项目的指针,其中一些是整数,一些是 float ,还有一些分数。这与嵌套列表几乎相同。这是 numpy 尝试将一组不同的对象放入一个数组的结果。

[[  1.28000000e+02   0.00000000e+00   8.33333333e-02]
 [  1.28000000e+02   0.00000000e+00   4.16666667e-02]]

看起来像 dtype float。整数和 float 都以 float 形式存储和显示。不用担心科学记数法;这正是显示器处理值范围的方法。它们是普通的花车。

第一个是一个 (n,4) 数组,n 个音符,每个音符 4 个值。

您可能可以将创作写为:

temp_arr = [get_midi_representation(note)),
           note.duration.dots,
           note.duration.quarterLength,
           float(note.duration.quarterLength.numerator) /            
                (note.duration.quarterLength.denominator)]

关于python - 具有不同数据类型的 Numpy 数组表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35591679/

相关文章:

python - 从不均匀的 numpy 数组中获取转置和/或从不均匀的 numpy 数组中获取平均值

python - 如何在 Tensorflow 训练期间将 [3751,4] 数据集密集并 reshape 为 [1,6] 数据集

machine-learning - 实现线性二元 SVM(支持向量机)

python - 使用 cx_Freeze 将所有 DLL 和 PYD 移动到子文件夹

python elementtree空白输出

python - 循环遍历 pandas 数据框,将公式应用于每个值

python - 如何向量化 SVM 中的损失

python - 获取 scipy.stats 分布的参数名称

machine-learning - 将公用事业分配给本地各州时,难以指定长期观点

python - Tensorflow LSTM 抛出 ValueError : Shape () must have rank at least 2