Python学习笔记--机器学习-数据科学库--numpy

本文详细介绍了numpy中的数组结构类型、数据类型转换、形状操作、计算功能、文件读取与转置,以及关键函数如reshape、广播、随机数生成和异常处理。通过实例演示了如何处理缺失值、数值计算和数据拼接,适合初学者和进阶者参考。
摘要由CSDN通过智能技术生成

第二部分numpy

1、结构类型

import numpy as np
import random
ti=np.array([1,2,3])
print(ti)
print(type(ti))
'''<class 'numpy.ndarray'> numpy数组类型'''


t4=np.array(range(1,4),dtype=float)
print(t4)
print(t4.dtype)
###调整数据类型
t6=t4.astype("int8")
print(t6)
print(t6.dtype)


##numpy中的小数
t7=np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)
t8=np.round(t7,2)
print(t8)

2.数组的形状
reshape

a=np.array([[3,4,5,6,7,8],[4,45,6,7,8,9]])
print(a)
print(a.shape)
b=a.reshape(3,4)
print(b)
c=b.reshape(1,12)
print(c)

3.数组的计算

t6=t5+2
print(t6)
t6=np.arange(100,112,1).reshape((3,4))
print(t5+t6)
print(t5-t6)
t8=np.arange(0,3).reshape((3,1))
print(t6-t8)

print(t6*t8)

广播原则
如果两个数组的后缘维度(从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的。广播会在确实和长度为1的维度上进行

t9=np.array([0,1,2,3,4,5])
t10=np.array([[0,1,2,3,4,5],
             [6,7,8,9,10,11]])
print(t10-t9)

4.numpy读取数据

import numpy as np
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')
##转置
t2=np.loadtxt(us_file_path,delimiter=",",dtype='int',unpack=True)
print(t1)
print("*"*100)
print(t2)

实现二维数组的转置

####numpy实现二维数组转置
t2=np.arange(24).reshape(4,6)
print(t2)
t3=t2.transpose()

t4=t2.T
t5=t2.swapaxes(1,0)  ##交换轴,转置
print(t3)
print(t4)
print(t5)

numpy读取和切片

import numpy as np
us_file_path='./youtube_video_data/US_video_data_numbers.csv'
uk_file_path='./youtube_video_data/GB_video_data_numbers.csv'
t2=np.loadtxt(us_file_path,delimiter=",",dtype='int')
##转置
#t1=np.loadtxt(us_file_path,delimiter=",",dtype='int',unpack=True)
#print(t1)
#print("*"*100)
print(t2)
##取行
print("*"*100)

print(t2[2])

##取连续的多行
print("*"*100)
print(t2[2:9])
##取不联系的多行
print("*"*100)
print(t2[[2,8,10]])  ##两个方括号
print("*。。"*100)
##’,‘前行,’,‘后列
##取行
print(t2[1,:])
print(t2[2:,:])
print(t2[[2,10,3],:])
print("*。*"*100)
#取列
##连续多列
print(t2[:,2:])

##不连续的多列
print(t2[:,[0,2]])


##取多行和多列,取第三行第四列
a=t2[2,3]
print(a)
print(type(a))

##取第三行到第五航,第2列到第四列队的结果

#q取得是行和列交叉点的位置
b=t2[2:5,1:4]  ##包头不包尾
print(b)
##取多个不相邻的点
c=t2[[0,2],[0,1]]
print(c)
##选的结果是(0,0),(2,1),(2,3)
d=t2[[0,2,2],[0,1,3]]
print(d)

numpy数值的修改
—numpy中的布尔索引

b=np.array([[3,4,5,6,7,8],[4,45,6,7,8,9]])
print(b)
b[b<10]=3
print('**&**'*20)
print(b)

–numpy中三元运算符
pumpy中的where

t=np.arange(24).reshape(4,6)
print(t)
t11=np.where(t<10,0,10)
print(t11)

[[ 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 0 0 0 0 0]
[ 0 0 0 0 10 10]
[10 10 10 10 10 10]
[10 10 10 10 10 10]]

Process finished with exit code 0

numpy中的clip

t=np.arange(24).reshape(4,6)
t12=t.clip(10,18)
print(t12)

[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[[10 10 10 10 10 10]
[10 10 10 10 10 11]
[12 13 14 15 16 17]
[18 18 18 18 18 18]]

numpy中赋值nan

print('**..**'*17)
t=np.arange(24).reshape(4,6)
t=t.astype(float)
t[3,3]=np.nan
print(t)

[[ 0. 1. 2. 3. 4. 5.]
[ 6. 7. 8. 9. 10. 11.]
[12. 13. 14. 15. 16. 17.]
[18. 19. 20. nan 22. 23.]]
numpy中的数组的拼接

a1=np.arange(24).reshape(4,6)
a2=np.arange(24,48).reshape(4,6)
##竖直分隔
a3=np.vstack((a1,a2))
##水平分隔
a4=np.hstack((a1,a2))
print(a3)
print(a4)

[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]
[24 25 26 27 28 29]
[30 31 32 33 34 35]
[36 37 38 39 40 41]
[42 43 44 45 46 47]]
[[ 0 1 2 3 4 5 24 25 26 27 28 29]
[ 6 7 8 9 10 11 30 31 32 33 34 35]
[12 13 14 15 16 17 36 37 38 39 40 41]
[18 19 20 21 22 23 42 43 44 45 46 47]]

numpy–数组的行列交换

a1=np.arange(24).reshape(4,6)
a6=a1[[1,2],:]=t1=[[2,1],:]
print(a6)
##列交换
a7=a1[:,[0,2]]=[[2,0],:]
print(a7)

numpy 更多好用的方法
获取最大最小值的位置
np.argmanx(t,axis=0)
np.argmin(t,axis=1)
创建一个全为0的数组
np.zeros((3,4))
np.ones((3,4))
创建一个对角线为1的正方形数组(方阵)
np.eye(3)

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: JMS
@file: my03.py
@time: 2022/05/24
@desc:
"""
import numpy as np

##加载国家数据
us_file_path='./youtube_video_data/US_video_data_numbers.csv'
uk_file_path='./youtube_video_data/GB_video_data_numbers.csv'
us_data=np.loadtxt(us_file_path,delimiter=",",dtype='int')
#转置
uk_data=np.loadtxt(uk_file_path,delimiter=",",dtype='int')
##添加国家信息
##构造全为0的数据
zeros_data=np.zeros((us_data.shape[0],1)).astype(int)
ones_data=np.ones((uk_data.shape[0],1)).astype(int) ##变成整形
##分别添加一列全为0,1数列
us_data=np.hstack((us_data,zeros_data))
uk_data=np.hstack((uk_data,ones_data))
##拼接两组数据
final_data=np.vstack((uk_data,us_data))
print(final_data)
print('**,**'*100)
t=np.eye(4)
print(t)
k=np.argmax(t,axis=0)
print(k)
t[t==1]=-1
print(t)
K=np.argmin(t,axis=1)
print(K)

numpy生成随机数
见笔记
numpy中的nan和inf
nan()NAN,Nan):表示不是一个数字
inf(-inf,inf) inf表示正无穷,-inf表示负无穷

关于nan
1两个nan是不相等的
2np.nan!=np.nan
3利用以上的特性,判断数组中nan的个数
np.count_nonzero(t!=t) nan
np.count_nonzero(t)非nan
4由于2,那么如何判断一个数字是否为nan呢?通过np.isnan(a)来判断,返回bool类型,比如希望把nan替换为0
t[np.isnan(t)]=0
5nan和任何值计算都为nan
np.sum(t)

e3=np.arange(12).reshape((3,4))
kk=np.sum(e3)
zz=np.sum(e3,axis=0) #每一行
yy=np.sum(e3,axis=1)#每一列
print(kk)
print(zz)
print(yy)

numpy 中nan的注意点
如果把nan替换成0是不行的
替换之前的平均值如果大于0,替换之后的均值肯定会变小
因此,更一般的方式是把确实的数值替换为均值(中值)或者直接删除有缺失的一行

numpy中常用统计函数
t.sum


#求和
h1=a1.sum(axis=0)
##均值
h2=a1.mean(axis=0)
##最大值
h3=np.median(a1,axis=0)
##最小值
h4=a1.min(axis=0)
##极小值
h5=np.ptp(t)
##标准差
h6=a1.std(axis=0)
print(h1,h2,h3,h4,h5,h6)

[36 40 44 48 52 56] [ 9. 10. 11. 12. 13. 14.] [ 9. 10. 11. 12. 13. 14.] [0 1 2 3 4 5] nan [6.70820393 6.70820393 6.70820393 6.70820393 6.70820393 6.70820393]

# coding=utf-8
import numpy as np


# print(t1)
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

            # 选中当前为nan的位置,把值赋值为不为nan的均值
            temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()
    return t1

if __name__ == '__main__':
    t1 = np.arange(24).reshape((4, 6)).astype("float")
    t1[1, 2:] = np.nan
    print(t1)
    t1 = fill_ndarray(t1)
    print(t1)

练习

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: JMS
@file: my06.py
@time: 2022/05/24
@desc:
"""
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import pyplot as py
us_file_path='./youtube_video_data/US_video_data_numbers.csv'
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]
##选择喜欢数比50W小的

t_uk_comment=t_uk[:,-1]
t_uk_like=t_uk[:,1]

plt.figure(figsize=(20,8),dpi=80)
plt.scatter(t_uk_like,t_uk_comment)
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值