numpy-基础知识和简单示例

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]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值