基本上,我的问题是,如果我保存一个包含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与它的对应数组进行匹配。
让我知道是否还有其他方法可以解决此问题。