赞
踩
1.为什么要学习numpy
快速,方便,科学计算的基础库
2.什么是numpy
重在数值计算,也是大部分python科学计算库的基础库,多用在大型,多维数组上执行数值运算
如何通过numpy创建数组
普通法,range法,np.arange法
- #使用numpy生成数组
- t1 = np.array([1,2,3])
- print(t1)
- print(type(t1))
-
- t2 = np.array(range(10))
- print(t2)
-
- t3 = np.arange(4,10,2)#(起点,终点,步长)
- print(t3)
- print(t3.dtype)#输出t3的数据类型
指定数据类型
- t4 = np.array(range(1,4),dtype=float)#指定数据类型
- print(t4)
- print(t4.dtype)
-
- t5 = np.array([1,1,0,0,1],dtype=bool)
- print(t5)
- print(t5.dtype)
调整数据类型
- t6 = t5.astype('int8')
- print(t6)
- print(t6.dtype)
生成随机小数并保留指定的位数
- t7 = np.array([random.random() for i in range(10)])
- print(t7)
- print(t7.dtype)
-
- t8 = np.round(t7,2)#保留两位小数
- print(t8)
查看数组形状
print(t3.shape)
改变数组形状
reshape方法为原地修改,没有返回值
注意改变为一维数组时所传的参数
将多维数组展开为一维数组
##数组的计算
数组与数进行计算
###数组与数组进行计算
对应位置加减乘数
在同一维度下进行运算
广播原则:如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或者其中一方的长度为1,则认为他们的广播是兼容的。广播会在缺失和(或)长度为1的维度上进行。(某一维度上形状一样)
数组的轴:
np.arange(0,10).reshape(2,5)中,2表示0轴的长度为2,1轴的长度为5,2乘以5总共10个数据
- us_file_path = './youtube_video_data/US_video_data_numbers.csv'
- uk_file_path = './youtube_video_data/GB_video_data_numbers.csv'
- t1 = np.loadtxt(us_file_path, delimiter=',', dtype='int', unpack=True)#delimiter为分隔符,unpack为旋转转置数据
unpack通俗的讲就是转置。
numpy中转置的三种方法
#取行
# print(t2[2])
# #取连续的多行
# print(t2[2:])
# #取不连续的多行
# print(t2[[2,8,10]])
# #取列
print(t2[:,0])#行不做要求,取第一列
print(t2[:,2:])#取连续多列,从第三列开始取
print(t2[:,[0,2]])#取不连续的列
#取多行多列,取第三行到第五行,第二列到第四列的结果
b = t2[2:5,1:4]
print(b)
#取多个不相邻的点
c = t2[[0,2],[0,1]]#选出的结果为(0,0)和(2,1)位置的点
print(c)
#numpy中的数值修改
- #将数组中小于10的数字替换为3
- t[t < 3] = 3
#numpy中的三元运算符
np.where(t2<=3,100,300)#将小于等于3的替换为100,否则替换为300
#numpy中的clip(裁剪)
t.clip(10,18)#将t中小于10的替换成10,大于18的替换成18
np.astype(float)
NAN----------not a number,当读取本地文件为float的时候,如果有缺失,就会出现nan,或者当出现不合适的计算时会出现NAN
inf-------表示正无穷
-inf--------表示负无穷
numpy中NAN的注意点:
1.两个nan是不相等的
2.执行以下,结果为True
np.nan != np.nan
3.利用以上特性,判断数组中nan的个数
4.
5. nan和任何值计算,结果都为nan
在一组数据中不可以把NaN单纯替换为0,更一般的方式是将数值替换为均值(中值),或者直接删除有缺失值的一行。
- import numpy as np
-
- def fill_ndarray(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
- temp_not_nan_col = temp_col[temp_col == temp_col]#当前一列不为nan的array
- temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()#选中当前为nan的位置,把值赋值为不为nan的均值
- return t1
-
- if __name__ == '__main__':
- t1 = np.arange(12).reshape(3,4).astype('float')
- t1[1,2:] = np.nan
- print(t1)
- t1 = fill_ndarray(t1)
- print(t1)
- import numpy as np
- from matplotlib import pyplot as plt
-
- us_file_path = './youtube_video_data/US_video_data_numbers.csv'
- uk_file_path = './youtube_video_data/GB_video_data_numbers.csv'
-
- t_us = np.loadtxt(us_file_path, delimiter=',', dtype='int')
-
- t_us_comments = t_us[:,-1]
- #选择比5000小的数据
- t_us_comments = t_us_comments[t_us_comments <= 5000]
- print(t_us_comments.max(),t_us_comments.min())
-
- d = 250
- bin_nums = (t_us_comments.max()-t_us_comments.min()) // d
-
- plt.figure(figsize=(20,8),dpi=80)
- plt.hist(t_us_comments,bin_nums)
- plt.show()
- import numpy as np
- from matplotlib import pyplot as plt
- uk_file_path = './youtube_video_data/GB_video_data_numbers.csv'
- t_uk = np.loadtxt(uk_file_path, delimiter=',', dtype='int')
- t_uk = t_uk[t_uk[:,1] <= 500000]
-
- t_uk_comment = t_uk[:,-1]
- t_uk_like = t_uk[:,1]
-
- plt.figure(figsize=(20,8),dpi=80)
- plt.scatter(t_uk_comment,t_uk_like)
- plt.show()
数组的拼接
- np.vstack((t1,t2))#竖直拼接
- np.hstack((t1,t2))#水平拼接
- #竖直分割
- #水平分割
-
数组的行列交换
- t[[1,2],:] = t[[2,1],:]#行交换
- t[:,[0,2]] = t[:,[2,0]]#列交换
实战:将英国和美国的数据进行拼接
- from typing_extensions import final
- import numpy as np
- from matplotlib import pyplot as plt
-
- us_file_path = './youtube_video_data/US_video_data_numbers.csv'
- uk_file_path = './youtube_video_data/GB_video_data_numbers.csv'
- uk_data = np.loadtxt(uk_file_path, delimiter=',', dtype='int')
- us_data = np.loadtxt(us_file_path, delimiter=',', dtype='int')
-
- #构造全部为0的数据
- zeros_data = np.zeros((us_data.shape[0],1)).astype('int')
- ones_data = np.zeros((uk_data.shape[0],1)).astype('int')
-
- us_data = np.hstack((us_data, zeros_data))
- uk_data = np.hstack((uk_data,ones_data))
-
- final_data = np.vstack((us_data,uk_data))
- print(final_data)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。