赞
踩
一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算(数组就是列表、列表嵌套列表等)
- import numpy as np
- t1 = np.array([1,2,3])
- print(t1)
- print(type(t1))
- t2 = np.array(range(10))
- print(t2)
- t3 = np.arange(10)
- print(t3)
- print(t3.dtype)
- [1 2 3]
- <class 'numpy.ndarray'>
- [0 1 2 3 4 5 6 7 8 9]
- [0 1 2 3 4 5 6 7 8 9]
- int64
- import numpy as np
- t1 = np.array(range(10),dtype="float64")
- print(t1)
- print(t1.dtype)
-
- t2 = t1.astype("int8")
- print(t2.dtype)
- [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
- float64
- int8
- t3 = np.array([random.random() for i in range(10)])
- print(t3)
- print(t3.dtype)
-
- t4 = np.round(t3,2)
- print(t4)
- [0.15551533 0.00401583 0.15190568 0.8632606 0.26929546 0.64721247
- 0.40041603 0.18216162 0.36326966 0.80083215]
- float64
- [0.16 0. 0.15 0.86 0.27 0.65 0.4 0.18 0.36 0.8 ]
- import numpy as np
- t1 = np.arange(12)
- print(t1)
- print(t1.shape)
-
- t2 = np.array([[1,2,3],[5,4,6]])
- print(t2.shape)
-
- t3 = np.array([[[1,2,3],[5,4,6]],[[2,2,5],[5,7,3]]])
- print(t3.shape)
-
- t4 = np.arange(12)
- print(t4.reshape((3,4)))
-
- t5 = np.arange(24).reshape((2,3,4))
- print(t5)
-
- print(t5.flatten())
- [ 0 1 2 3 4 5 6 7 8 9 10 11]
- (12,)
- (2, 3)
- (2, 2, 3)
- [[ 0 1 2 3]
- [ 4 5 6 7]
- [ 8 9 10 11]]
- [[[ 0 1 2 3]
- [ 4 5 6 7]
- [ 8 9 10 11]]
-
- [[12 13 14 15]
- [16 17 18 19]
- [20 21 22 23]]]
- [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
在numpy中可以理解为方向,使用0,1,2...数字表示,对于一个一维数组,只有一个0轴,对于2维数组(shape(2,2)),有0轴和1轴,对于三维数组(shape(2,2,3)),有0,1,2轴
CSV:Comma-Separated Value,逗号分隔值文件 显示:表格状态 源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录 由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的
np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
unpack为转置,默认为False
- import numpy as np
- a = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
- print(a[1])
- #取第一行,第三行
- print(a[[0,2]])
- print(a[1:])
- #取列
- print(a[:,0])
- print(a[:,[0,2]])
-
- print(a[2,3])
- print(type(a[2,3]))
-
- #取多行多列,取第2行到第三行,第2列到第三列
- #取的是行列的交叉点位置
- b = a[1:3,1:3]
-
- #取多个不相邻的点
- c = a[[0,1],[0,3]]
- print(c)
- #取得点是 (0,0)(1,3)
- [4 5 6 7]
- [[ 0 1 2 3]
- [ 8 9 10 11]]
- [[ 4 5 6 7]
- [ 8 9 10 11]]
- [0 4 8]
- [[ 0 2]
- [ 4 6]
- [ 8 10]]
- 11
- <class 'numpy.int64'>
- [0 7]
np.where(t>10,20,0) 把t中大于10的替换成20,其他的替换为0
t里边小于10的换成10,大于18的换成18,nan是浮点类型
nan(NAN,Nan):not a number表示不是一个数字
什么时候numpy中会出现nan:
当我们读取本地的文件为float的时候,如果有缺失,就会出现nan当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)
- import numpy as np
- t3 = np.arange(12).reshape((3,4))
- print(t3)
- print(np.sum(t3))
- print(np.sum(t3,axis=0))
- print(np.sum(t3,axis=1))
- [[ 0 1 2 3]
- [ 4 5 6 7]
- [ 8 9 10 11]]
- 66
- [12 15 18 21]
- [ 6 22 38]
那么问题来了,在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响?
比如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行
- import numpy as np
- t2=np.array([[0,3,3,3,3,3],
- [0,3,3,3,10,11],
- [0,13,14,15,16,17],
- [0,19,20,11,20,20]])
-
- print(t2.sum(axis=0))
- print(t2.mean(axis=0))
- print(t2.max(axis=0))
- print(t2.min(axis=0))
- print(np.median(t2,axis=0))
- print(np.ptp(t2)) #极值,最大值和最小值之差
- print(t2.std()) #标准差
- [ 0 38 40 32 49 51]
- [ 0. 9.5 10. 8. 12.25 12.75]
- [ 0 19 20 15 20 20]
- [0 3 3 3 3 3]
- [ 0. 8. 8.5 7. 13. 14. ]
- 20
- 7.281540587906747
- import numpy as np
- t1 = np.arange(12).reshape((3,4)).astype("float")
- t1[1,2:] = np.nan
- print(t1)
- for i in range(t1.shape[1]):
- temp_col = t1[:,i] #当前的一列
- nan_num = np.count_nonzero(temp_col!=temp_col)
- if nan_num !=0: #不为0,说明当前这一列中有nan
- tem_not_nan_col = temp_col[temp_col==temp_col] #当前一列不为nan的array
- temp_col[np.isnan(temp_col)] = tem_not_nan_col.mean()
- print(t1)
- [[ 0. 1. 2. 3.]
- [ 4. 5. nan nan]
- [ 8. 9. 10. 11.]]
- [[ 0. 1. 2. 3.]
- [ 4. 5. 6. 7.]
- [ 8. 9. 10. 11.]]
↵
现在希望把之前案例中两个国家的数据方法一起来研究分析,同时保留国家的信息(每条数据的国家来源),应该怎么办?
- import numpy as np
- us_data = ""
- uk_data = ""
-
- #加载国家数据
- us_data = np.loadtxt(us_data,delimiter=",",dtype = int)
- uk_data = np.loadtxt(us_data,delimiter=",",dtype = int)
-
- #添加国家信息
- #构造全为0的数据
- zeros_data = np.zeros(us_data.shape[0],1).astype(int)
- ones_date = np.ones(ukss_data.shape[0],1).astype(int)
-
- #分别添加一列全为0,1的数据
- us_data = np.hstack((us_data,zeros_data))
- uk_data = np.hstack((uk_data,ones_date))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。