[Python]numpy数据分析练习[21~30]

Posted 鱼竿钓鱼干

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python]numpy数据分析练习[21~30]相关的知识,希望对你有一定的参考价值。

[Python]numpy数据分析练习[21~40]

题目和解析地址
此博客主要用于自己做些知识点笔记

题目和答案

21. 如何在numpy数组中只打印小数点后三位?

只打印或显示numpy数组rand_arr的小数点后3位。
set_printoptions设置输出选项中的precision

import numpy as np

rand_arr=np.random.random((5,3))
np.set_printoptions(precision=3)
print(rand_arr)

其他打印选项

属性含义
precision输出精度,小数点后几位
threshold数组过大的时候,设置显示多少个数字,其余的用省略号表示
edgeitems当省略数组内元素内容时要显示的元素数量
linewidth每一行要打印的元素个数
suppress是否要打印显示小数位(是否使用科学计数法打印数字)
nanstr当数组元素值出现NaN时所要显示的字符串
infstr数组元素值出現inf时所显示的字串

22. 如何通过e式科学记数法(如1e10)来打印一个numpy数组?

通过e式科学记数法来打印rand_arr(如1e10)
直接在ndarray后面初上e式科学记数法

import numpy as np
arr=np.linspace(1,10,9)
arr=arr.reshape(3,3)/1e10
print(arr)
rand_arr=np.random.random((5,3))/1e3
print(rand_arr)

23. 如何限制numpy数组输出中打印的项目数?

将numpy数组a中打印的项数限制为最多6个元素。
threshold设置显示数量,中间超出的省略

import numpy as np
arr=np.arange(15)
np.set_printoptions(threshold=6)
print(arr)

24.如何打印完整的numpy数组而不截断

打印完整的numpy数组a而不截断。
threshold属性设为无穷大即可
原本给的np.nan会报错,下面给出解决方案

import numpy as np
import sys
np.set_printoptions(threshold=6)
a = np.arange(15)

# 原本给的答案有问题会报错
'''
np.set_printoptions(threshold=np.nan)
raise ValueError("threshold must be non-NAN, try "
ValueError: threshold must be non-NAN, try sys.maxsize for untruncated representation
'''
#np.nan改为sys.maxsize或者np.inf即可
np.set_printoptions(threshold=sys.maxsize)
print(a)

25. 如何导入数字和文本的数据集保持文本在numpy数组中完好无损?

导入鸢尾属植物数据集,保持文本不变。

使用genfromtxt导入数据,参数分别为来源,分隔符,类型
names参数给每列分配一个名字
保持文本不变那就是原样传入,设置dtype为object即可

import numpy as np
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris=np.genfromtxt(url,delimiter=',',dtype='object')
names = ('sepallength', 'sepalwidth', 'petallength', 'petalwidth', 'species')
print(iris)
names=()

26. 如何从1维元组数组中提取特定列?

从前面问题中导入的一维鸢尾属植物数据集中提取文本列的物种
给定输入dtype=None,给了个1维元组
row[4]即传第4列

species=np.array([row[4] for row in iris_1d])
import numpy as np
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_1d=np.genfromtxt(url,delimiter=',',dtype=None)
print(iris_1d.shape)
species=np.array([row[4] for row in iris_1d])
print(species)
names=()

27. 如何将1维元组数组转换为2维numpy数组?

通过省略鸢尾属植物数据集种类的文本字段,将一维鸢尾属植物数据集转换为二维数组iris_2d。
使用usecols参数选择要用的列

import numpy as np
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_1d=np.genfromtxt(url,delimiter=',',dtype=None)
iris_2d=np.genfromtxt(url,delimiter=',',dtype=float,usecols=[0,1,2,3])
print(iris_2d)

另外一种转化的方法(不是很懂)

import numpy as np
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_1d=np.genfromtxt(url,delimiter=',',dtype=None)
iris_2d = np.array([row.tolist()[:4] for row in iris_1d])
print(iris_2d)

28. 如何计算numpy数组的均值,中位数,标准差?

计算第一列的均值中位数标准差
usecols取出第一列,然后直接函数计算即可

import numpy as np
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_1d=np.genfromtxt(url,delimiter=',',dtype='object')
sepallength=np.genfromtxt(url,delimiter=',',dtype=float,usecols=[0])
mu,med,sd=np.mean(sepallength),np.median(sepallength),np.std(sepallength)
print(mu,med,sd)

29. 如何规范化数组,使数组的值正好介于0和1之间?

归一化,数模挺常用的操作
获取数据后照着公式写即可
S = x − S m i n S m a x − S m i n S=\\frac {x-S_{min}} {S_{max}-S_{min}} S=SmaxSminxSmin

import numpy as np
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_1d=np.genfromtxt(url,delimiter=',',dtype='object')
sepallength=np.genfromtxt(url,delimiter=',',dtype=float,usecols=[0])
Smax,Smin=sepallength.max(),sepallength.min()
S=(sepallength-Smin)/(Smax-Smin)
print(S)

30. 如何计算Softmax得分?

了解一下Softmax,相较hardmax(也就是我们平常说的最大值)
Softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。
可以看一下这篇文章
D = m a x ( S ) S o f t m a x ( z i ) = e z i − D ∑ c = 1 C e z c − D D=max(S)\\\\ Softmax(z_i)=\\frac {e^{z_i-D}} {\\sum_{c=1}^C e^{z_c-D}} D=max(S)Softmax(zi)=c=1CezcDeziD

import numpy as np
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_1d=np.genfromtxt(url,delimiter=',',dtype='object')
sepallength=np.genfromtxt(url,delimiter=',',dtype=float,usecols=[0])

def softmax(x):
    e_x=np.exp(x-np.max(x))
    return e_x/e_x.sum(axis=0)

print(softmax(sepallength))

以上是关于[Python]numpy数据分析练习[21~30]的主要内容,如果未能解决你的问题,请参考以下文章

Python数据分析numpy入门-------numpy100题练习

Python数据分析numpy入门-------numpy100题练习

[Python]numpy数据分析练习[1~20]]

python基础练习—— 数据分析包numpy数组操作

机器学习入门——numpy100练习题

Ironpython调用numpy问题