Numpy Savez是否保留已保存的数组顺序。

时间:2018-10-16 05:49:12

标签: python numpy

基本上,我的问题是,如果我保存一个包含numpy数组的列表,并使用numpy savez保存它,savez是否保留每个数组的保存顺序?

例如,

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

保留listofNumpyArrays中的numpy数组的顺序吗?

这非常重要,因为我有另一个数组,每个组件都需要与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成为对象,这在计算上不是最佳的。

据我搜索,还没有一种计算优化的方法可以将此类数据保存在一个变量中。因此,看起来我必须将第一列(包含单个int)保存在一个numpy数组中,并且对于每个int,我还必须分别保存另一个数字数组,以优化计算效率。

我可以保持原样,或者使用list而不是数组,但是当我尝试保存到文件或由于文件大而试图从文件加载时,环境崩溃数据量。因此,我需要找到一种计算效率最高的方式来保存我的数据,同时保留顺序,以便我可以将正确的int与它的对应数组进行匹配。

让我知道是否还有其他方法可以解决此问题。

0 个答案:

没有答案