[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之间?
归一化,数模挺常用的操作
获取数据后照着公式写即可
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的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。
可以看一下这篇文章
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))