要学习的一个重要教训是,您应该始终为您的问题选择正确的数据结构。在大多数情况下,如果您想追加/连接,那么numpy 是错误的选择,除非您可以简单地设置最终数组(及其最终形状)并通过设置切片来更改它。
在这种情况下,显而易见的选择是使用普通的 python list 和 range:
mydata = [[49123400, 49123499],
[33554333, 33554337]]
mynewdata = []
for sublist in mydata:
mynewdata.extend(range(sublist[0], sublist[1]+1))
>>> mynewdata
[49123400, 49123401, 49123402, 49123403, 49123404, 49123405,
49123406, 49123407, 49123408, 49123409, 49123410, 49123411,
49123412, 49123413, 49123414, 49123415, 49123416, 49123417,
49123418, 49123419, 49123420, 49123421, 49123422, 49123423,
49123424, 49123425, 49123426, 49123427, 49123428, 49123429,
49123430, 49123431, 49123432, 49123433, 49123434, 49123435,
49123436, 49123437, 49123438, 49123439, 49123440, 49123441,
49123442, 49123443, 49123444, 49123445, 49123446, 49123447,
49123448, 49123449, 49123450, 49123451, 49123452, 49123453,
49123454, 49123455, 49123456, 49123457, 49123458, 49123459,
49123460, 49123461, 49123462, 49123463, 49123464, 49123465,
49123466, 49123467, 49123468, 49123469, 49123470, 49123471,
49123472, 49123473, 49123474, 49123475, 49123476, 49123477,
49123478, 49123479, 49123480, 49123481, 49123482, 49123483,
49123484, 49123485, 49123486, 49123487, 49123488, 49123489,
49123490, 49123491, 49123492, 49123493, 49123494, 49123495,
49123496, 49123497, 49123498, 49123499, 33554333, 33554334,
33554335, 33554336, 33554337]
这可以简单地转换为numpy.array:
>>> np.array(mynewdata)
array([49123400, 49123401, 49123402, 49123403, 49123404, 49123405,
49123406, 49123407, 49123408, 49123409, 49123410, 49123411,
49123412, 49123413, 49123414, 49123415, 49123416, 49123417,
49123418, 49123419, 49123420, 49123421, 49123422, 49123423,
49123424, 49123425, 49123426, 49123427, 49123428, 49123429,
49123430, 49123431, 49123432, 49123433, 49123434, 49123435,
49123436, 49123437, 49123438, 49123439, 49123440, 49123441,
49123442, 49123443, 49123444, 49123445, 49123446, 49123447,
49123448, 49123449, 49123450, 49123451, 49123452, 49123453,
49123454, 49123455, 49123456, 49123457, 49123458, 49123459,
49123460, 49123461, 49123462, 49123463, 49123464, 49123465,
49123466, 49123467, 49123468, 49123469, 49123470, 49123471,
49123472, 49123473, 49123474, 49123475, 49123476, 49123477,
49123478, 49123479, 49123480, 49123481, 49123482, 49123483,
49123484, 49123485, 49123486, 49123487, 49123488, 49123489,
49123490, 49123491, 49123492, 49123493, 49123494, 49123495,
49123496, 49123497, 49123498, 49123499, 33554333, 33554334,
33554335, 33554336, 33554337])
甚至直接写入文件而不用关心数组:
with open('yourfile', 'w') as file:
file.write(str(mynewdata).replace(',', ';'))
最后是关于为什么将整数转换为 floats 的说明:
>>> np.empty((0))
array([], dtype=float64)
np.empty 创建一个浮点数组,因此追加/连接将始终生成float 数组。如果你想要一个整数数组,请使用np.empty(0, int):
>>> np.empty(0, int)
array([], dtype=int64)