numpy 进阶

首先,这篇文字是我在 机器学习算法的那些事 这个公众号里面看到的,在这复现给大家,一起学习!

*正文起始*

1.如何获取满足条件设定件的索引

import numpy as np
arr_rand = np.array([8, 8, 3, 7, 7, 0, 4, 2, 5, 2])
print(arr_rand>4)   # 这只能返回一个bool列表,满足条件的为true

# 最低级的可以使用循环
index=[]
for i,value in enumerate(arr_rand):
    if value>4:
        index.append(i)
print(index)  # 返回一个列表

# 利用np.where()
index1=np.where(arr_rand>4)
print(index1) #返回一个ndarrary数组

'''拓展np.where(condition,x,y):
    检查condition,如果满足条件,那么用X里面的元素替代满足条件的元素
    如果不满足的话,使用y里面的元素替代满足条件的元素
   np.where(arr_rand>4,arr_rand,0):arr_rand里面>4的元素不动,不满足该条件的元素设为0 
'''
#利用np.argmax(A),np.argmin(A)可以索引出数组A中最大值和最小值所在的位置索引
#如果想要知道数组A中的最大值和最小值的话  可以使用np.max(A) np.min(A)
a_min=np.argmin(arr_rand)
a_max=np.argmax(arr_rand)
min=np.max(arr_rand)
max=np.max(arr_rand)
print(a_min,a_max,max,min)

2.数据导入和导出csv

#导入数据的标准方法是使用np.genfromtxt函数,它可以从web URLs导入数据,处理缺失值,多种分隔符,处理不规则的列数等功能。
    # 一个不太通用的版本是用np.loadtxt函数导入数据,它假设数据集无缺失值。
    # 从url的csv文件导入数据
    path = 'https://raw.githubusercontent.com/selva86/datasets/master/Auto.csv'
    # delimiter:分隔符,skip_header:从多少行开始读数据,以0开始,filling_values:缺失值表示,dtype:数据类型
    data = np.genfromtxt(path, delimiter=',', skip_header=1, filling_values=-999, dtype='float')
    
    #若设置参数dtype为'object'或'None',np.genfromtxt在未设置占位符的前提下能同时处理具有数字和文本列的数据集.
    data1 = np.genfromtxt(path, delimiter=',', skip_header=1, filling_values=-999, dtype=None)
    print(data1[:3])  # 显示前3行数据
    
    # 保存数据为csv文件
    np.savetxt("out.csv", data, delimiter=",")

3. 存储和读取 numpy 对象,一般格式为name.npy格式

x=[[1,2,3],[4,5,6]]
    np.save("x.npy",x) # 写入
    data=np.load("x.npy")  # 读取
    print(data)

4. 如何按列或行拼接numpy数组

'''   方法1:设置np.concatenate参数axis的值为1或0,实现数组的列拼接或行拼接。
        方法2:np.vstack和np.hstack
        方法3:np.r_和np.c_
        需要注意的是,np.r_和np.c_使用方括号来拼接数组,其他两种方法使用括号。'''
    # 定义两个拼接的数组
    a = np.zeros([4, 4])
    b = np.ones([4, 4])
    
    #行拼接数组
    h1=np.concatenate([a, b], axis=0)
    h2=np.vstack([a,b])
    h3=np.r_[a,b]
    print(h1,h2,h3)
    # 列拼接数组
    m1=np.concatenate([a, b], axis=1)
    m2=np.hstack([a,b])
    m3=np.c_[a,b]
    print(m1,m2,m3)

5 .按列数据进行排序:有三种按列排序方法:np.sort,np.argsort和np.lexsort。

# 在介绍三种排序方法前,先定义一个2维数组.
arr=np.random.randint(1,6,size=(8,4))

# np.sort()
a=np.sort(arr,axis=0)
print(a,'\n') #np.sort排序函数认为所有列是相互独立的,对所有列进行排序,破坏了每行的结构,
'''补充下a.sort()和np.sort(a)的区别
    import numpy as np
    lst=[1,4,7,2,2,5,0]
    lst1=[1,4,7,2,2,5,0]
    lst.sort()
    print(lst)
    lst1_s=np.sort(lst1)
    print(lst1_s)
    print(lst1)
    一句话就是: a.sort() 会在原来的数据a上直接排序,不返回新的数组
                np.sort(a)会进行一个浅拷贝的过程,不会对原数组产生影响,返回一个新的数组
    '''
#np.argsort()

# 对arr的第一列进行排序,返回索引
sorted_index = arr[:, 0].argsort()
# 根据第一列的索引对数组排序,保留了行的完整性
print(arr[sorted_index],'\n')

# np.lexsort()

#若要基于多个列对数组进行排序,使用np.lexsort函数,它的参数是元组类型,
# 元组的每个元素表示数组的某一列,排序规则是:越靠近右边的列,优先级越高.
# 先比较第一列,第一列相同的情况下再比较第二列
lexsorted_index1 = np.lexsort((arr[:, 1], arr[:, 0]))
print(arr[lexsorted_index1],'\n')

6. numpy 处理日期

# np.datetime64创建日期对象,精确度达到纳秒,你可以使用标准的YYYY-MM-DD格格式的字符串作为参数创建日期.
date64=np.datetime64("2019-05-18 17:14:32")
print(date64)
# 从datetime对象分离时间
dt64=np.datetime64(date64,"D") # 其中D的意思是day之前的数据我都要,当然也可以是Y、M、D、m、s、ns
print(dt64)
#如果你想增加天数或其他任何时间单元,比如月份,小时,秒等,使用np.timedelta函数非常方便.
tenminutes = np.timedelta64(10, 'm')  		# 10 分钟
tenseconds = np.timedelta64(10, 's')  		# 10 秒钟
tennanoseconds = np.timedelta64(10, 'ns')  	# 10 纳秒
print(dt64+tenminutes,"\n",dt64+tenseconds,"\n",dt64+tennanoseconds,"\n")

# dt64转化为字符串
dt64_s=np.datetime_as_string(dt64)
print(dt64_s)

# 创建日期序列
start=np.datetime64("2019-05-01")
end=np.datetime64("2019-05-11")
daa=np.arange(start,end)
print(daa)
#把numpy.data64对象转化为datatime.datatime对象,
# 需要将datetime64 转化为datetime.datetime对象,才好单独对数据进行切分
dt = dt64.tolist()
print(dt)
# 获取datatime对象的年月日非常简便
print(dt.year,dt.month)
*欢迎批评、指正*
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值