数字数组有信息函数吗?



我正在寻找一些函数,它返回有关numpy.ndarray的最重要信息。 通常,我打印数组并得到完全错误的印象,因为字符串强制转换只显示最外部元素。

实际上,我不时会遇到以下问题:

  • 只是外部元素是 nan,但它也包含非 nan 条目
  • 在某处隐藏了一个 nan 值,因此有必要使用 nan-save 函数(例如 np.nanmean(( 而不是 np.mean(((
  • 发生np.inf,这会阻止对有限值的值范围进行任何简单的概述

例如,pandas库具有 DataFrame.info(( 方法。麻皮有吊坠吗?

目前我使用一种解决方法,给我的结果如下

np.ndarray of shape (5, 11)
---
dtype: float64
contains non-finite elements: nan, inf
---
mean: 8.375849056603775
min: 0.0
max: 16.74
---
std: 4.9867932880730885
mad: 6.434493628314312
---
values:
[[ 0.    0.31  0.62  0.93  1.24  1.55  1.86  2.17  2.48  2.79  3.1 ]
[ 3.41  3.72  4.03  4.34  4.65  4.96  5.27   inf  5.89  6.2   6.51]
[ 6.82  7.13  7.44  7.75  8.06  8.37  8.68  8.99  9.3   9.61  9.92]
[10.23 10.54   nan 11.16 11.47 11.78 12.09 12.4  12.71 13.02 13.33]
[13.64 13.95 14.26 14.57 14.88 15.19 15.5  15.81 16.12 16.43 16.74]]

这是代码:

import numpy as np
from statsmodels.robust import mad
def ndarray_info(arr, verbose=2):
"""returns extensive information about an np.ndarray as string"""
finArr = arr.flatten()
finArr = finArr[np.isfinite(finArr)]
info = ''
info += f'np.ndarray of shape {arr.shape}n'
info += 't---n'
info += f'tdtype: {arr.dtype}n'


info += f'tcontains non-finite elements: '
nonFinElLst = []
if np.isnan(arr).any():
nonFinElLst += ['nan']
if np.isinf(arr).any():
nonFinElLst += ['inf']
if len(nonFinElLst) > 0:
info += ', '.join(nonFinElLst) + 'n'
else:
info += '--n'
info += 't---n'
info += f'tmean: {np.mean(finArr)}n'
info += f'tmin: {np.min(finArr)}n'
info += f'tmax: {np.max(finArr)}n'

if verbose >=1:
info += 't---n'
info += f'tstd: {np.std(finArr)}n'
info += f'tmad: {mad(finArr)}n'
if verbose >=2:
info += 't---n'
info += 'values:n' + str(arr) + 'n'

return info
arr= np.arange(0,17,.31).reshape(5,11)
arr[3,2] = np.nan
arr[1,7] = np.inf
print(ndarray_info(arr))

最新更新