首先,这篇文字是我在 机器学习算法的那些事 这个公众号里面看到的,在这复现给大家,一起学习!
*正文起始*
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)
*欢迎批评、指正*