Numpy: загрузка данных из файла JSON дает np-массив с вложенными списками

#python #json #numpy

#python #json #numpy

Вопрос:

Я загружаю данные из файла JSON в виде списка, а затем создаю массив NumPy.

Файл JSON структурирован следующим образом

 {
    "label": "4",
    "mfcc": [
        [
            [
                -147.2358550730904,
                52.60503152410914,
                <more values Total=13>

            ],
            <more arrays Total=44>

  

Код, который я использую для создания массива NumPy, используя данные, собранные из файла JSON

 with open("data.json", 'r') as file:
   data = json.load(file)
   
   mfcc = np.array(data["mfcc"])
  

Кажется, что самый внешний список преобразуется в массив NumPy, в то время как внутренние списки все еще являются списками. Смотрите изображение ниже:

Изображение, показывающее типы данных

Что произошло?

Заранее спасибо!

Комментарии:

1. Строка / файл JSON может быть комбинацией вложенных списков и dicts. Вы не показываете ни один файл или список после загрузки. np.array(alist) даст хороший многомерный массив, только если вложение в список является регулярным (как показано в numpy.array документах. Так что просто сказать, что файл является JSON, не поможет нам помочь вам.

2. Я добавил фрагмент файла JSON

3. data["mfcc"] выглядит как список, но он может быть недостаточно регулярным, чтобы превратиться в многомерный массив.

4. Список был неправильным. Я добавил условие в код, который заставил файл JSON справиться с этим. Спасибо.

Ответ №1:

Таким образом, это означает, что файл содержит массив numpy со списками внутри.

  • Либо это было сделано специально
  • Либо вы (или кто-то другой) пытались преобразовать список list в массив numpy, но не все вложенные списки имеют одинаковую длину (что требуется для массива numpy). Поэтому numpy создает не правильный 2D-массив numpy, а 1D-массив numpy со списками внутри. Чтобы исправить это, убедитесь, что все вложенные списки имеют одинаковую длину ( 0 например, вы можете дополнить их)

Комментарии:

1. Второй пункт не выполняется. Данные в файле JSON являются полными

2. Перепроверил файл JSON. Недостающие значения были самозванцем. Спасибо

3. Рад, что вы нашли проблему. Пожалуйста, не забудьте подтвердить ответ или добавить ответ на свой вопрос для будущих читателей