【问题标题】:How to convert a Python dictionary to a Numpy array?如何将 Python 字典转换为 Numpy 数组?
【发布时间】:2021-05-15 01:13:29
【问题描述】:

因此,来自 Python 的 sklearn 库的逻辑回归具有 .fit() 函数,该函数将 x_train(features) 和 y_train(labels) 作为参数来训练分类器。

好像x_train.shape = (number_of_samples, number_of_features)

对于 x_train 我应该使用提取的 xvector.scp 文件,我正在阅读如下:

b = kaldiio.load_scp('xvector.scp')

我可以像这样打印内容:

for file_id in b:
  xvector = b[file_id]
  print(xvector)

现在b变量就像一个字典,你可以得到对应id的x向量值。我想使用 sklearn Logistic Regression 对 x 向量进行分类,为了使用 .fit() 方法,我应该将数组作为参数传递。

我的问题是如何创建一个只包含 xvector 变量的数组?

PS:file_ids 大约是 100 万,每个 xvector 的长度为 512,对于数组来说太大了

【问题讨论】:

  • 它可能很有用,但我仍然不确定如何将 b 转换为需要传递给 .fit() 方法的格式。现在它就像一个文件阅读器,而不是一个可以作为 'x' 参数传递给 .fit() 方法的数组。
  • 请不要合并问题;照原样,您似乎没有询问任何特定于所使用文件格式的内容。如果这是您的实际问题,请编辑并更新您的帖子以明确澄清。
  • 无论如何,这将是文件格式之间转换的问题,与LR本身无关。

标签: python numpy scikit-learn kaldi


【解决方案1】:

您似乎正在尝试将字典存储到一个 numpy 数组中。如果字典很小,可以直接将值存储为:

import numpy as np

x = np.array(list(b.values()))

但是,如果字典很大,这将遇到 OOM 问题。在这种情况下,您需要使用np.memmap,如下所述:https://ipython-books.github.io/48-processing-large-numpy-arrays-with-memory-mapping/

基本上,您必须一次向数组中添加一行,并在内存不足时刷新它。数组直接存储在磁盘上,避免了OOM问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2018-05-28
    • 2019-05-29
    • 1970-01-01
    • 2020-09-16
    • 2015-10-13
    • 1970-01-01
    相关资源
    最近更新 更多