打印没有省略号的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数组中的所有数据

是否有与 NumPy 的省略号切片语法 (...) 等效的 Julia?

numpy切片里的省略号[...,0]的作用