Наиболее эффективный в вычислительном отношении способ (с точки зрения оперативной памяти, а не места для хранения) для сохранения множества (миллионов) массивов разной длины в определенном порядке - PullRequest
0 голосов
/ 16 октября 2018

Мне нужно сохранить список, содержащий пустые массивы, в определенном порядке, используя наиболее эффективный в вычислительном отношении метод.Когда я имею в виду «вычислительно эффективный», я имею в виду, что занимает наименьшее количество оперативной памяти, а не места для хранения.

Например,

numpy.savez('test.pnz', *listofNumpyArrays)

сохранит ли порядок пустых массивов в listofNumpyArrays и при этом тратит минимум оперативной памяти?

Порядок очень важен, потому что яесть другой массив int одного измерения, и каждый компонент в этом массиве должен соответствовать определенному массиву в listofNumpyArrays

Я изначально поместил все эти числа в одну переменную Numpy, и это выглядело так, с единственнымint в качестве первого компонента каждой строки и соответствующий массив в качестве второго компонента каждой строки (первые 10 строк показаны ниже):

array([[0,
        array([10158697,  5255434,  9860860,  3677049,  3451292,  7225330])],
       [1,
        array([ 5985929,  7356938,  5232932,  4623077, 10461651,  6629144,
        2738221,  7672279,  3197654, 11678039,  1912097,  6581279,
        8141689,  6694817,  6139889,  7946369,  3995629,  3169031,
        3793217,  6990097, 11298098,  6120907,  5336712,  7366785,
        7363171,  3933563,  6484209,  4243394,  6371367,  4361218,
       11469370,  6166715, 11519607, 11602639, 10759034,  6432476,
        5327726, 11390220,  7009744, 10225744,  3781058,  1305863,
         462965,  1158562,  2620006,    73896,  4945223, 11780201,
        3044821])],
       [2,
        array([10847593,  8665775,   341568,  4164850,  6509965,  8227738])],
       [3,
        array([ 9105020,  1896456,  2757197,  5911741,  8123078, 10629261,
        5646782,  5255907,  8802504,  3735293,  5496511,  1612181,
       10029269,  8911733,  8035123,  4855475,  2226494, 10448630,
        2041328,   532211, 10049766,  7320606,  7783187, 11536583,
        9192742,  8965808,  7750786,  2462038,   111935,  4306882,
       11193228])],
       [4,
        array([11406300,  9947761,  2539951,  1928472,  1286647,  1360522,
        9680046,  1304518,  2577907,  5903319,  6304940,  8249558,
       11156695,  5704721,  9753227,   465481,  8849435,  5040956,
        8124190, 11094867,  9225419, 10531161,  3796335,  6660230,
         823696,  3271428,  9167574])],
       [5, array([3535672, 9474011, 4708696, 9700618, 4762633])],
       [6,
        array([ 1352149,  6408648,  3218823,   977256,  2488662,   603435,
        6576555,  2555278,  5487362, 10008975,  5066785,  5294573,
        1381729])],
       [7,
        array([ 7078697,  2981709,  2426786,   676729,  2688166,  3353437,
        7244406,  7804172,  9142652, 10594869,    95474,  3867698,
        6645756,  1936281,  3728779, 10800050,  8270358,  2336174,
        6785259,  7282204,  7485619,  8041965,  2445126,  5681877,
        8383953,  9431775, 11442616,  9835489,  3940227,  1289543,
          87876,  6148249,  3026723,  1651607,  4135482,   916739,
       10408908,  9178863, 11775813,  1652898,  1190197,  1913270,
        3759101,  7491500,  5183607,  8476053,  8482428, 11354398,
        2370455,  6820229,  3952122,  9633865,  4498499,  1475415,
       11303906,  2958509, 10639369])],
       [8,
        array([   67999,  3847504,  8303130,   748628,  1321792,  3453436,
        2813805,  6915028,  8459024, 10499123,  8855154,  9783163,
        8580897,  3092270,  3438170,  9067374, 11068581,  4926186,
        6137797,  2207028,  2806970,  8601327,  5183768, 10655752,
        2775719,  6653472,  3995496,  2488194,  3610797,  5508794,
        6524258,  2368954,     2070,  9522863,  1765121,  7842059,
       11473248,  3077500,   130699,  1407101,  2434487,  1129155,
        5643519,  7780188])],
       [9, array([8528119, 6930255,  630592, 5476242])]], dtype=object)

Однако, когда я попытался сохранить его, моя среда зависла, потому чтоУ меня закончилась память.Позже я узнал, что numpy оптимизирован для строк фиксированной длины, так что, как вы можете видеть, общий тип dtype становится объектом, который не является вычислительно оптимальным для массивов numpy и который, вероятно, угадывает мою среду (Google Colab Laboratory) на аварийное завершение.

Я также пробовал, когда вторым компонентом является список, а не массив, и который на самом деле может сохранить в файл .npy, используя numpy.save.Однако, когда я попытался загрузить файл, он снова падает.

Насколько я искал, не существует вычислительно оптимизированного способа сохранения таких данных в одной числовой переменной.Похоже, мне нужно сохранить первый столбец (содержащий одиночные целые) в одном массиве.И затем для каждой из этих целых есть еще один массив чисел, который я должен сохранить отдельно в этом конкретном порядке, оптимизируя при этом оперативную память для этого процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...