2017-02-24 43 views
0

我看过this response试图让numpy打印完整的数组而不是总结视图,但它似乎并没有工作。numpy将不打印完整(unsummarized阵列)

我有一个CSV与命名标题。这里是前五行

v0 v1 v2 v3 v4 
1001 5529 24 56663 16445 
1002 4809 30.125 49853 28069 
1003 407 20 28462 8491 
1005 605 19.55 75423 4798 
1007 1607 20.26 79076 12962 

我想读取数据并能够完整地查看它。我试过这样做:

import numpy as np 
np.set_printoptions(threshold=np.inf) 

main_df2=np.genfromtxt('file location', delimiter=",") 
main_df2[0:3,:] 

但是,这仍然返回截断数组,并且性能似乎大大减慢。我究竟做错了什么?

+1

最后一行显示什么?那只有3行和5列,如果'genfromtxt'是正确的。 – hpaulj

回答

0

当我在这里复制并粘贴数据时,它在Excel中打开,但文件是CSV。

我在做课堂练习,我们必须使用numpy。有一两件事我注意到的是,该结果为科学记数法相当潦草的感谢,所以我做了以下和事情更加顺畅:

np.set_printoptions(threshold=100000, suppress=True)

的压制声明救了我很多的格式。当我将threshold更改为'nan'inf之类的东西时,性能确实会受到很大影响,我不知道为什么。

+0

这个文件有多大?页面和页面的行? – hpaulj

+0

25,000行,所以我不希望它在Python中很慢?或者在Python中是典型的?我的其他编程经验在R. – vashts85

+0

我无法想象尝试打印(写入屏幕)25000行的任何东西!我可能会将它拖到更少/更多,并滚动查看选定的行。但是整件事情呢? – hpaulj

1

我很惊讶你得到一个数组,因为你的例子不使用','作为分隔符。但也许你忘了在你的示例文件中包含逗号。

如果我使用csv数据,我会使用pandas的DataFrame功能。它在底层使用numpy,因此所有numpy操作都可以在熊猫DataFrame上运行。

熊猫有许多操作表格数据的技巧。

import pandas as pd 

df = pd.read_csv('nothing.txt') 
#============================================================================== 
# next line remove blanks from the column names 
#============================================================================== 
df.columns = [name.strip(' ') for name in df.columns] 

pd.set_option('display.height', 1000) 
pd.set_option('display.max_rows', 500) 
pd.set_option('display.max_columns', 500) 
pd.set_option('display.width', 1000) 

print(df) 
+0

当我复制并粘贴数据时,它在Excel中打开,但文件是CSV。 – vashts85

+1

我明白了。 Excel做了很好的格式。 “pandas”的方法有效吗? – Henning

1

OK,在常规的Python会话(我一般用的IPython代替),我设置打印选项,并做了一个大阵:

>>> np.set_printoptions(threshold=np.inf, suppress=True) 
>>> x=np.random.rand(25000,5) 

当我执行的下一行,它花费约21秒格式化数组,然后将结果字符串写入屏幕(使用比适合终端的窗口缓冲区更多的行)。

>>> x 

这是一样的

>>> print(repr(x)) 

x内部存储是浮动的缓冲区(你可以“看”与x.tostring()。打印x它必须格式化,创建多行字符串,其中包含每个数字的打印表示,全部为125000个字符,repr(x)的结果是一个字符串,长度为1850000 char long,行数为25000行,这是21秒的时间,屏幕上的显示只受终端滚动速度的限制。

我没有看过细节,但我认为numpy格式主要是用Python编写的,而不是编译的。它的设计灵活性高于速度。想要查看10-100行数组是正常的。 25000行是一种不寻常的情况。

有些奇怪的是,写这个阵列为CSV快,以最小的延迟:

>>> np.savetxt('test.txt', x, fmt='%10f', delimiter=',') 

而且我知道什么savetxt那样 - 它遍历行上,并没有写入文件

f.write(fmt % tuple(row)) 

显然,所有常规repr的铃铛都很昂贵。它可以总结,它可以处理很多维度,它可以处理复杂的dtypes等等。简单地用已知的固定格式格式化每一行不是耗时的步骤。

实际上,savetxt路线可能更有用,也更快。您可以控制显示格式,并且可以在编辑器或终端窗口中随时查看生成的文本文件。您不会受到终端窗口的滚动缓冲区的限制。但这savetxt文件将如何不同于原来的csv

+0

谢谢,我试图保持简单,但也许你的想法也可能工作。 – vashts85