打印没有省略号的numpy数组
Posted
技术标签:
【中文标题】打印没有省略号的numpy数组【英文标题】:Print numpy array without ellipsis 【发布时间】:2017-11-02 20:18:14 【问题描述】:我想打印一个不截断的 numpy 数组。我见过其他解决方案,但这些似乎不起作用。
这里是sn-p的代码:
total_list = np.array(total_list)
np.set_printoptions(threshold=np.inf)
print(total_list)
这是输出的样子:
22 A
23 G
24 C
25 T
26 A
27 A
28 A
29 G
..
232272 G
232273 T
232274 G
232275 C
232276 T
232277 C
232278 G
232279 T
这是整个代码。我可能在类型转换中犯了一个错误。
import csv
import pandas as pd
import numpy as np
seqs = pd.read_csv('BAP_GBS_BTXv2_imp801.hmp.csv')
plts = pd.read_csv('BAP16_PlotPlan.csv')
required_rows = np.array([7,11,14,19,22,31,35,47,50,55,58,63,66,72,74,79,82,87,90,93,99])
total_list = []
for i in range(len(required_rows)):
curr_row = required_rows[i];
print(curr_row)
for j in range(len(plts.RW)):
if(curr_row == plts.RW[j]):
curr_plt = plts.PI[j]
curr_range = plts.RA1[j]
curr_plt = curr_plt.replace("_", "").lower()
if curr_plt in seqs.columns:
new_item = [curr_row,curr_range,seqs[curr_plt]]
total_list.append(new_item)
print(seqs[curr_plt])
total_list = np.array(total_list)
'''
np.savetxt("foo.csv", total_list[:,2], delimiter=',',fmt='%s')
total_list[:,2].tofile('seqs.csv',sep=',',format='%s')
'''
np.set_printoptions(threshold='nan')
print(total_list)
【问题讨论】:
它对我有用,也许你的 total_list 不是一个 numpy 数组? 这不是 numpy 数组的样子。确定不是熊猫系列? 您要打印到文件吗? 这才是真正的意图。但是遇到了同样的问题。所以我想先在终端上打印。 这个文件需要人类可读吗?还是为了存储数据? 【参考方案1】:使用以下 sn-p 来避免省略号。
import numpy
import sys
numpy.set_printoptions(threshold=sys.maxsize)
编辑:
如果您有pandas.DataFrame
,请使用以下 sn-p 打印您的数组:
def print_full(x):
pd.set_option('display.max_rows', len(x))
print(x)
pd.reset_option('display.max_rows')
或者您可以使用pandas.DataFrame.to_string() 方法来获得想要的结果。
编辑':
这篇文章的早期版本建议以下选项
numpy.set_printoptions(threshold='nan')
从技术上讲,这可能有效,但是,numpy 文档将 int 和 None 指定为允许的类型。参考:https://docs.scipy.org/doc/numpy/reference/generated/numpy.set_printoptions.html.
【讨论】:
python 和 numpy 版本? Python 3.5.2,numpy 1.11.1 @Harjatin 可能其他打印格式不正确(循环中的第一个) 我评论了所有其他打印语句。输出仍然被截断。 至少从 1.16.5 开始,这不起作用:ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
,所以使用sys.maxsize
。【参考方案2】:
您可以通过将其更改为 list
来绕过奇怪的 Numpy repr/print 行为:
print list(total_list)
应该打印出您的 2 元素 np 数组列表。
【讨论】:
这仍然给出相同的输出 奇怪 - 如果你也使用total_list.tolist()
会发生这种情况吗?
您可能会运行您编辑的不同代码:))我可以确认两个答案都可以正常工作。添加print("hello")
或其他任何内容
total_list
的开头是什么?
numpy 的打印在大多数情况下更有用,因为它更具可读性——数字之间没有逗号..【参考方案3】:
您不是打印 numpy 数组。
在导入后添加以下行:
pd.set_option('display.max_rows', 100000)
【讨论】:
谢谢。这行得通。我有点困惑,不应该total_list = np.array(total_list)
将 DataFrame 隐蔽到 numpy 数组吗?【参考方案4】:
#for a 2d array
def print_full(x):
dim = x.shape
pd.set_option('display.max_rows', dim[0])#dim[0] = len(x)
pd.set_option('display.max_columns', dim[1])
print(x)
pd.reset_option('display.max_rows')
pd.reset_option('display.max_columns')
【讨论】:
【参考方案5】:从 Python 3 开始,阈值似乎不再是无限的了。
因此,推荐的选项是:
import numpy
import sys
numpy.set_printoptions(threshold=sys.maxsize)
【讨论】:
以上是关于打印没有省略号的numpy数组的主要内容,如果未能解决你的问题,请参考以下文章
只有整数、切片 (`:`)、省略号 (`...`)、numpy.newaxis (`None`) 和整数或布尔数组是有效的索引
RandomForest IndexError:只有整数、切片(`:`)、省略号(`...`)、numpy.newaxis(`None`)和整数或布尔数组是有效的索引
只有整数、切片 (`:`)、省略号 (`...`)、numpy.newaxis (`None`) 和整数或布尔数组是生成 rnn 的有效索引
numpy使用np.printoptions函数抑制numpy对于长numpy数组的自动省略显示numpy数组中的所有数据