没有合适的资源?快使用搜索试试~ 我知道了~
Numpy 基础 引言 这是一篇介绍Numpy基础的文章,是我啃书的笔记,不对Numpy的实现原理和高级特性等细节 做过多研究,学会基础的Numpy就可以应对日常的大部分数值型数据的操作,后面的博客我会 继续记录Pandas的学习进程,它将会更加强大。 # numpy基础 数组和矢量计算 # ndarray是一个同构数据多维模型: import numpy as np list=[1,2,3,4,"a","b"] myndarry=np.array(list) # 注意是np.array()函数,而不要误写为np.ndarray() myndarry array(['1', '2',
资源推荐
资源详情
资源评论
Numpy基础学习基础学习
Numpy 基础基础
引言引言
这是一篇介绍Numpy基础的文章,是我啃书的笔记,不对Numpy的实现原理和高级特性等细节
做过多研究,学会基础的Numpy就可以应对日常的大部分数值型数据的操作,后面的博客我会
继续记录Pandas的学习进程,它将会更加强大。
# numpy基础 数组和矢量计算
# ndarray是一个同构数据多维模型:
import numpy as np
list=[1,2,3,4,"a","b"] myndarry=np.array(list) # 注意是np.array()函数,而不要误写为np.ndarray()
myndarry
array(['1', '2', '3', '4', 'a', 'b'], dtype='<U11')
# 大部分数据分析工作不需要深入理解numpy,只需要了解numpy数组的基本用法。除非想成为科学计算牛人。
# 接下来讲解 numpy数组的基本用法:
# 一,创建 ndarray:
# 1)np.array()方法: 接收一切序列类型对象,包括其他数组。
# 2)其他方法,如:np.zeros(),np.ones(),np.empty(),np.arange(),np.ones_like(),np.zeros_like(),
# np.eye(),np.empty_like(),np.identity()等。
# 1--数组的属性:
import numpy as np
mylist=[1,2,3,4,5] myarray=np.array(mylist)
print(myarray) # [1 2 3 4 5] 矩阵
print(myarray.ndim) # 1 维数
print(myarray.size) # 5 元素总数
print(myarray.shape) # (5,) 形状 一维数组的形状 (n,)或(1,n)
print(myarray.dtype) # int32 数据类型
print(myarray.itemsize) # 4 每个元素的字节大小 32/8=4
# 2--特殊的数组:
#下面这些数组,如果没有特别指定,一般都是float64(浮点型),因为Numpy关注的是数值运算。
# 2.1--np.zeros()函数:
np.zeros(5) # array([0., 0., 0., 0., 0.])
np.zeros((2,3))
array([[0., 0., 0.],
[0., 0., 0.]])
# 2.2--np.ones()函数:
np.ones(5) # array([1., 1., 1., 1., 1.])
np.ones((2,3))
array([[1., 1., 1.],
[1., 1., 1.]])
# 2.3--np.empty()函数:
# empty函数可以创建一个没有具体值的数组(即垃圾值):
np.empty((2,2)) # 认为np.empty返回全0数组是不安全的,很多情况下,返回的都是一些未初始化的垃圾值,比如:
array([[8.06624499e-308, 2.55894868e-307],
[2.22521646e-307, 1.89144859e-307]])
# 2.4--np.arange()函数:模仿指定的ndarray创建全1或全0数组。
# arange函数类似于python的内置函数range,但arange函数主要用于创建数组。
np.arange(5) # array([0, 1, 2, 3, 4])
np.arange(1,5) # array([ 1, 2, 3, 4])
np.arange(1,10,2) # array([1, 3, 5, 7, 9])
array([1, 3, 5, 7, 9])
# 2.5--np.ones_like()函数和np.zeros_like()函数:
arr01=np.array([[1,2,3,4],[5,6,7,8]])
# arro1
# array([[1, 2, 3, 4],
# [5, 6, 7, 8]])
arr02=np.zeros_like(arr01)
# arr02
# array([[0, 0, 0, 0],
# [0, 0, 0, 0]])
arr03=np.ones_like(arr01)
# arr03
# array([[1, 1, 1, 1],
# [1, 1, 1, 1]])
arr04=np.array([["a",1,"s"],["c",2,"v"]])
# arr04
# array([['a', '1', 's'],
# ['c', '2', 'v']], dtype='<U1')
arr05=np.ones_like(arr04)
# arr05
# array([['1', '1', '1'],
# ['1', '1', '1']], dtype='<U1')
# 2.6--np.eye()函数,np.empty_like()函数,np.identity()函数, np.asarray()函数:
# 用到再来学习。
# 二,ndarray 的数据类型
# Numpy既可以为新建的数组推断出合适的数据类型,也可以通过dtype属性来指定类型。
# Numpy有很多数据类型,记住下面这些常用的就可以:
# folat int complex复数 bool布尔 string_ python对象:object
# 各数据类型及代码以及数据类型的解释见《利用python及逆行数据分析(2)》p121
# 1--数据类型推断:
arr01=np.array([0,1,2,3,4])
arr01.dtype # 推断为 dtype('int32')
dtype('int32')
# 2--为数组指定数据类型时:
arr01=np.array([0,1,2,3,4],dtype='float64')
arr01.dtype #dtype('folat64')
arr02=np.arange(10,dtype='float')
arr02.dtype
dtype('float64')
# 3--使用astype显示转换数据类型,不改变原数组,返回一个新数组:
# 语法:newarr=arr.astype([np.]数据类型)方法 或 newarr=arr.astype(arr2.dtype)方法 使用其他数组的dtype作为参数
# 3-1)将数值型转为字符串:
arr01=np.array([0,1,2,3,4],dtype='float64')
arr02=arr01.astype(np.string_)
arr02.dtype #dtype('S32')
dtype('S32')
arr02
array([b'0.0', b'1.0', b'2.0', b'3.0', b'4.0'], dtype='|S32')
# 3-2)将浮点型数组转为整数,并不会四舍五入,而是直接截断
arr01=np.array([0,1,2.5,3.1,4.2],dtype='float64')
arr02=arr01.astype(np.int32)
arr02.dtype #dtype('int32')
arr02 # array([0, 1, 2, 3, 4])
# 3-3-1)将字符串型的数字的数组转成数值类型:
arr01=np.array(['0','1','2.5','3.1','4.2'])
arr02=arr01.astype(np.float64)
arr02 # array([0. , 1. , 2.5, 3.1, 4.2])
arr02.dtype # dtype('float64')
# 3-3-2)如果数组里有字符型字符串,使用astype转为数值就会报错:
arr01=np.array(['a','1','e','3.1','4.2'])
arr02=arr01.astype(np.float64) #ValueError: could not convert string to float: 'a'
arr02
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in
13 # 3-3-2)如果数组里有字符型字符串,使用astype转为数值就会报错:
14 arr01=np.array(['a','1','e','3.1','4.2'])
---> 15 arr02=arr01.astype(np.float64) #ValueError: could not convert string to float: 'a'
16 arr02
ValueError: could not convert string to float: 'a'
# 3-4)使用其他数组的数据类型 newarr=arr.astype(arr2.dtype)方法
arr01=np.array([0,1,2,3,4],dtype='float64')
arr02=np.array(["1","4","5"])
arr03=arr02.astype(arr01.dtype)
arr03.dtype
dtype('float64')
# 三,数组和标量之间的运算
# 数组之所以很重要,是因为它不需要编写循环就可以对数组内每一个数据元素进行运算,通常称之为矢量化。
# 大小相等的数组之间的任何算术运算都会将运算应用到元素级:
# 不同大小的数组之间的运算叫做广播,本书不对广播机制做深入了解,可在附录A NUmpy高级应用中了解一下。
# 数组的标量运算:
# step1 数组准备
arr=np.array([[1.,2.,3.],[4.,5.,6.]])
# arr=np.arange(1.0,7.0).reshape(2,3)
arr
array([[1., 2., 3.],
[4., 5., 6.]])
# step2: 数组与数组 数组×数组
arr*arr
array([[ 1., 4., 9.],
[16., 25., 36.]])
# ste3: 数组与数组 数组-数组
arr-arr
array([[0., 0., 0.],
[0., 0., 0.]])
# step4: 数组与标量
1/arr
array([[1. , 0.5 , 0.33333333],
[0.25 , 0.2 , 0.16666667]])
arr**2
array([[ 1., 4., 9.],
[16., 25., 36.]])
arr-0.5
array([[0.5, 1.5, 2.5],
[3.5, 4.5, 5.5]])
# step5: 数组与标量的混合运算
3*arr+2
array([[ 5., 8., 11.],
[14., 17., 20.]])
# step6: 数组之间的比较, 返回布尔值类型数组
arr2 = np.array([[0., 4., 1.], [7., 2., 12.]])
arr>arr2
array([[ True, False, True],
[False, True, False]])
# 四,基本索引和切片
# Numpy 数组的索引方法非常多,一维数组很简单和pyton 列表类似。
# 1--一维数组元素的访问:
arr=np.arange(10)
arr[5]
5
# 2--一维数组的切片:
arr[5:8]
array([5, 6, 7])
# 3--一维数组切片的赋值:
# 会广播到切片的所有元素,且会影响原数组(数组的切片是原数组的视图,这和python的list切片是原list的浅复制不同)
# 之所以会这样,是因为Numpy是为大数据考虑的,如果不是在原数组上操作,而是复制来复制去,会非常占用内存。
arr[3:7]=12
# 或:
# arr_slice=arr[3:7] # arr_slice=12
arr
array([ 0, 1, 2, 12, 12, 12, 12, 7, 8, 9])
arr_slice2=arr[6:9] arr_slice2[0]=9999 # 改变切片的第一个元素值
arr_slice2[1:]=8888
arr # 影响到了原数组
array([ 0, 1, 2, 12, 12, 12, 9999, 8888, 8888, 9])
剩余18页未读,继续阅读
资源评论
weixin_38530415
- 粉丝: 4
- 资源: 940
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功