似乎因为一个简单的问题而碰壁了。我正在尝试读取文件中的数组。这些列是整数和字符串的混合;只对第 0、2、3 列感兴趣。
import numpy as np
network = np.loadtxt('temp.biflows',skiprows=1, usecols=(0,2,3), delimiter = '\t', dtype=[('ts','i10'), ('sndr','|S14'), ('recr', '|S14')])
print network.shape
输入文件的样本;列由制表符分隔 \t
:
1441087368 1441087365 186.251.68.208 186.251.68.145 17 137 137 3 0 150 0
1441087342 1441087341 125.144.214.126 125.144.195.105 17 137 137 2 0 100 0
1441087370 1441087370 186.251.139.178 170.85.175.203 17 35905 161 2 2 760 850
实际上有 30104 行。网络的最终形状为 network.shape = (30104,)
。我正在寻找的是网络是一个形状为 (30104,3)
的数组。
FWIW我的目标是根据第一列(时间戳)对行进行排序。
任何有关我可能做错的事情的建议将不胜感激(以及如何进行排序的建议)。
最佳答案
您无法创建形状为 (n, 3) 的 numpy 数组,其中每列都有不同的类型。您可以创建什么(以及将loadtxt
与dtype=[('ts','i10'), ('sndr',' |S14'), ('recr', '|S14')]
) 是创建一个结构化数组,数组中的每个元素都是由多个字段组成的结构体。在您的情况下,您有三个字段:一个是整数,两个是字符串。 loadtxt
创建的数组是一个一维数组。数组中的每个元素都是一个具有三个字段的结构。您可以通过 network['ts']
、network['sndr']
和 network[' 访问字段(您可以将其解释为“列”) recr']
。
参见http://docs.scipy.org/doc/numpy/user/basics.rec.html了解更多信息。这里可能也有很多关于 SO 的相关信息。例如,Access Columns of Numpy Array? Errors Trying to Do by Transpose or by Column Access
关于python - numpy loadtxt 不会产生数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503945/