目录
numpy 学习大汇总
一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算。
一、创建数组(array)
import numpy as np
import random
t1=np.array([1,2,3,4,5,6])
t2=np.array(range(6))
t3=np.arange(1,15,2)
print(t1)
print(t2)
print(t3)
二、指定创建数组的数据类型
t1=np.array([1,0,1,0],dtype=bool)
print(t1)
print(t1.astype("int64"))
print(t1)
print('*'*10)
t2=np.array([random.random() for i in range(10)])#产生10个随机数
t2=t2.round(2)#保留小数点后两位
print(t2)
三、数组的形状
t3=np.array([[1,2,3],[4,5,6]])
print(t3.shape)
print(t3.reshape(3,2))#具有返回值,并不会改变原来的数组形状。
print(t3.shape)
四、产生多维数组
t4=np.arange(24).reshape((2,3,4))#三维
print(t4)
t5=t4.reshape(t4.shape[0]*t4.shape[1]*t4.shape[2])#类似列表相乘
print(t5)
t6=t4.flatten()
print(t6)
五、数组之间的计算
“”“两个知识点”""
1.t2 != t2和np.isnan(t2)返回结果一致,返回的数组中,nan的位置是True,但是非nan的数据是False
2. np.count_nonzero(t2!=t2)和np.count_nonzero(np.isnan())都是统计t2中nan的个数,返回值是具体的数值。
a=np.arange(24).reshape(2,3,4)
b=np.arange(3).reshape((3,1))
print(a)
print("#"*10)
print(b)
print("*"*10)
print(a*b)
t6=np.arange(12).reshape((2,6)).astype(float)
t6[:,4]=np.nan#将数组中部分值改为nan,nan本身是浮点数类型
print(t6)
print("*"*10)
print(t6!=t6)
print("*"*10)
print(np.count_nonzero(t6!=t6))
print(np.count_nonzero(t6))
t6[:,0]=np.nan
print("*"*10)
t6[t6!=t6]=24
print(t6==t6)
print(t6)
六、将元组中nan的值转化为该列的平均值
"""
@desc: 随机建立一个数组,将nan的值所在的位置转化形成该列的平均值
主要利用知识点:
1.当t中含有nan值是,t!=t
2.np.count_nonzero(t!=t)和np.count_nonzero(np.isnan(t))结果一样,都是进行计算t中nan的值
"""
import numpy as np
"""遍历array,寻找nan的列"""
def fill_col_nan(t):
for i in range(t.shape[1]):
tem_t=t[:,i]#遍历的当前这一列
nan_num=np.count_nonzero(tem_t!=tem_t)#t统计nan的个数
if nan_num!=0:#当前遍历这一列出现nan
"""计算该列非nan值的平均值,并赋值给nan的位置"""
not_nan=tem_t[tem_t==tem_t]
tem_t[np.isnan(tem_t)]=not_nan.mean()
return t
if __name__=="__main__":
t1 = np.arange(24).reshape((4, 6)).astype(float)
t1[1, :] = np.nan
print(t1)
print('*'*20)
print(fill_col_nan(t1))
###############################################返回结果是:
[[ 0. 1. 2. 3. 4. 5.]
[nan nan nan nan nan nan]
[12. 13. 14. 15. 16. 17.]
[18. 19. 20. 21. 22. 23.]]
********************
[[ 0. 1. 2. 3. 4. 5.]
[10. 11. 12. 13. 14. 15.]
[12. 13. 14. 15. 16. 17.]
[18. 19. 20. 21. 22. 23.]]
七、将元组中nan的值转化为该行的平均值
import numpy as np
def fill_ro_nan(t):
for i in range(t.shape[0]):
t_tem=t[i,:]#遍历的当前这一行
num_nam=np.count_nonzero([t_tem!=t_tem])
if num_nam!=0:#如果这一行存在nan
not_nan=t_tem[t_tem==t_tem]
t_tem[np.isnan(t_tem)]=not_nan.mean()
return t
if __name__=="__main__":
t1 = np.arange(24).reshape((4, 6)).astype(float)
t1[1:3, 1:3] = np.nan
print(t1)
print('*' * 20)
print(fill_ro_nan(t1))
#################################返回结果是:
[[ 0. 1. 2. 3. 4. 5.]
[ 6. nan nan 9. 10. 11.]
[12. nan nan 15. 16. 17.]
[18. 19. 20. 21. 22. 23.]]
********************
[[ 0. 1. 2. 3. 4. 5.]
[ 6. 9. 9. 9. 10. 11.]
[12. 15. 15. 15. 16. 17.]
[18. 19. 20. 21. 22. 23.]]
八、汇总两国数据,但是表明两国数据
"""
@desc: 合并英国,美国的youtube中视频的评论数和喜欢数的关系,但在数据中标注好两国的数据。
"""
"""读入两国的数据"""
import numpy as np
us_data=np.loadtxt(r'us.csv',delimiter=",",dtype="int",skiprows=1)
uk_data=np.loadtxt(r'uk.csv',delimiter=",",dtype="int",skiprows=1)
"""添加国家信息"""
#构造行数和国家行数一致,但是只存在一列的0或1:
zero_us=np.zeros((us_data.shape[0],1)).astype(int)#填写shape的形状,即几行几列
ones_uk=np.ones((uk_data.shape[0],1)).astype(int)
#将美国和英国各水平添加上一列:
uk=np.hstack((uk_data,ones_uk))
us=np.hstack((us_data,zero_us))
"""进行两国信息竖直拼接,"""
s=np.vstack((us,uk))
print(s)
######################################返回结果是:
[[1856423 15623 1840800 0]
[1856424 15624 1840800 0]
[1856425 15625 1840800 0]
[1856426 15626 1840800 0]
[1856427 15627 1840800 0]
[1856428 15628 1840800 0]
[1856429 15629 1840800 0]
[1856430 15630 1840800 0]
[1856431 15631 1840800 0]
[1856432 15632 1840800 0]
[1856433 15633 1840800 0]
[1856434 15634 1840800 0]
[1856435 15635 1840800 0]
[1856436 15636 1840800 0]
[1856437 15637 1840800 0]
[1856438 15638 1840800 0]
[1856439 15639 1840800 0]
[1856440 15640 1840800 0]
[1856441 15641 1840800 0]
[1856442 15642 1840800 0]
[1856443 15643 1840800 0]
[1856444 15644 1840800 0]
[1856445 15645 1840800 0]
[1856623 15623 1841000 1]
[1856624 15623 1841001 1]
[1856625 15623 1841002 1]
[1856626 15623 1841003 1]
[1856627 15623 1841004 1]
[1856628 15623 1841005 1]
[1856629 15623 1841006 1]
[1856630 15623 1841007 1]
[1856631 15623 1841008 1]
[1856632 15623 1841009 1]
[1856633 15623 1841010 1]
[1856634 15623 1841011 1]
[1856635 15623 1841012 1]
[1856636 15623 1841013 1]
[1856637 15623 1841014 1]
[1856638 15623 1841015 1]
[1856639 15623 1841016 1]
[1856640 15623 1841017 1]
[1856641 15623 1841018 1]
[1856642 15623 1841019 1]
[1856643 15623 1841020 1]
[1856644 15623 1841021 1]
[1856645 15623 1841022 1]]