Numpy学习笔记——基本语句

学习碎碎念:因为numpy是pandas的基础,所以学习了这一部分的基础知识,但是因为jupyter实在是太好用了,所以就很不想整理这一部分学习的笔记。最近学习状态不是很好,因为懒惰和懒散,自己每天学习时长太短了~加油啊!好好学赶紧找工作搬砖!

numpy的学习主要是看视频资料+numpy官网tutorial+微信文章。
官网tutorial:https://numpy.org/devdocs/user/quickstart.html
在学习过程中发现微信公众号的排版往往比博客上更舒服和可读,看一些总结性文章来掌握框架,再从网络上搜索一些细节的博客可能更适合学习这种有点琐碎的知识架构。

生成数组

impot numpy as np 导入numpy库,并为了简写命名为np
Numpy数组类array class叫做ndarray,与列表相比ndarray各元素并没有被逗号隔开
np.array
np.array(object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0)

  • object
    np.array([list]),对于含有str类型的数组,int也会变成str
    多维数组用[]来划分每一个维数 如ar2=np.array([[1,2,3,4,5,6],[7,8,9,10,11,12]])就是生成一个二维数组
  • dtype
    可用于指定生成元素的数组类型,一般默认float 64
  • ndmin
    生成数组应具有的最小维数(轴数),当实际维数未达到ndmin时,强制转化为ndmin(直接加[]来增加维数)

np.random随机数和np.arange生成器见后面。

import numpy as np

l=[1,2,3,4,5,6]#列表
print('list: ',l,type(l))#list有逗号

ar=np.array([1,2,3,4,5,6])#数组

print('np: ',ar,type(ar))#数组没有逗号

print(np.array(range(10)))

print(np.arange(10))#生成器

print(np.array([1,2,3,4,5]))#list

print(np.array([[1,2,3,4],[1,2,3,4]]))

print(np.array([[1,2,3],['a','b','c']]))#对含有str类型的数组,int也会变成str

print(np.array([[1],[1,2,3]]))#变成两个list

print(np.random.rand(10))

print(np.random.rand(10).reshape(2,5))#利用reshape可以改变数组形状
'''
list:  [1, 2, 3, 4, 5, 6] <class 'list'>
np:  [1 2 3 4 5 6] <class 'numpy.ndarray'>
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
[[1 2 3 4]
 [1 2 3 4]]
[['1' '2' '3']
 ['a' 'b' 'c']]
[list([1]) list([1, 2, 3])]
[0.50904836 0.49565435 0.91427059 0.55389469 0.63312383 0.61583569
 0.50579488 0.93944113 0.50271946 0.22356069]
[[0.43748497 0.87667731 0.30465276 0.22989857 0.97472987]
 [0.63661429 0.04521706 0.31698298 0.89053813 0.26404541]]
'''

np.arange
类似range用法来创建数组

print(np.arange(10))#0-(n-1)的整数
print(np.arange(0,10,2))#以2为间隔
print(np.arange(10,0,-1))#以负数为间隔
print(np.arange(5,10))#改变起始点位置
print(np.arange(5.0))#生成浮点数
'''
[0 1 2 3 4 5 6 7 8 9]
[0 2 4 6 8]
[10  9  8  7  6  5  4  3  2  1]
[5 6 7 8 9]
[0. 1. 2. 3. 4.]
'''

np.linspace
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
弥补arange在创建浮点数时不能精确判断需要创建的数组元素数,linspace可以在指定区间内,按指定样本数返回均匀间隔样本。
start:起始值,stop:结束值,num:生成样本数,默认为50
endpoint:如果为真,则stop是最后一个样本,默认值为True,False则不包括stop样本
retstep:如果为真,retstep返回tuple,包括array样本和步长step的tuple,

np.linspace
print(np.linspace(1,10,num=10))
print(np.linspace(1,10,num=5))
print(np.linspace(1,10,num=10,endpoint=True))#m默认Ture包含最后一个值
print(np.linspace(1,10,num=10,endpoint=False))#mFalse不包含最后一个值
print(np.linspace(1,10,num=10,retstep=True))#retstep返回tuple,包括array和步长
'''
[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
[ 1.    3.25  5.5   7.75 10.  ]
[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
[1.  1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1]
(array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.]), 1.0)
'''

zeros ones eye
zeros全0,ones全1,zeros和ones的用法完全相同,
zeros多维需要加在()内,如np.zeros((3,4))
可以dtype指定类型,默认float64
可以reshape更改尺寸
np.zeros_like(ndarray)生成与ndarray形状、元素类型都相同的全零数组

eye生成对角线为1其余位置全0的正方形矩阵
当eye行列不同时,返回较小数字对应的eye矩阵

print(np.zeros(3))

print(np.zeros((3,4)))#多维要加在括号内,zeros(2,3)是错的
print(np.zeros(12).reshape(3,4))#多维也可以用reshape

print(np.zeros((3,4),dtype=np.int))#默认浮点型,zeros内的dtype可以改为int

arr=np.array([[1,2,3,4,5],[1,2,3,4,5]])
print(arr)
#返回具有与给定数组相同的形状和类型的零数组,元素float或int与arr相同
print(np.zeros_like(arr))
'''
[0. 0. 0.]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]
[[1 2 3 4 5]
 [1 2 3 4 5]]
[[0 0 0 0 0]
 [0 0 0 0 0]]
'''
#ones ones_like完全同上
print(np.ones(3))

print(np.ones((3,4)))#多维要加在括号内,zeros(2,3)是错的
print(np.ones(12).reshape(3,4))#多维也可以用reshape

print(np.ones((3,4),dtype=np.int))#默认浮点型,zeros内的dtype可以改为int

arr=np.array([[1,2,3,4,5],[1,2,3,4,5]])
print(arr)
print(np.ones_like(arr))#生成同维的全1矩阵,元素float或int与arr相同

# eye
print(np.eye(5))
print(np.eye(5,4))#行列不同则返回较小数字的矩阵
重要属性:
  • ndarray.ndim
    可以理解为轴线或者维数(rank秩),一维数组用一个轴就可以索引所有元素,二维数组可以看作两个一维数组,第一个一维数组中每个元素都是一个一维数组,因此二维数组有两个轴。
  • ndarray.shape
    每个维度里数组的大小
  • ndarray.size
    数组中所有元素的总数,相当于shape所有元素的乘积
  • ndarray.dtype
    数组中元素的类型,type也可以用于ndarray,numpy有自己的类型如numpy.int 16, numpy.int32 前者表示int还是float,后者表示字节数。
import numpy as np

l=[1,2,3,4,5,6]#列表
print('list: ',l,type(l))#list有逗号

ar=np.array([1,2,3,4,5,6])#数组
ar#交互输出有数组前有array
print('np: ',ar,type(ar))#数组没有逗号

ar2=np.array([[1,2,3,4,5,6],[7,8,9,10,11,12]])#二维数组,[]框起来的两个一位数组
print('np: ',ar2,type(ar2))#数组没有逗号

print(ar.ndim)#数组维度的个数,rank秩
print(ar2.ndim)

print(ar.shape)#数组维数,(n,m)数组n行m列
print(ar2.shape)

print(ar.size)#数组元素个数
print(ar2.size)

print(ar.dtype)#数组元素中数值类型

print(ar.itemsize)#数组元素字节大小
'''
list:  [1, 2, 3, 4, 5, 6] <class 'list'>
np:  [1 2 3 4 5 6] <class 'numpy.ndarray'>
np:  [[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]] <class 'numpy.ndarray'>
1
2
(6,)
(2, 6)
6
12
int32
4
'''
数组形状

需要注意ndarry.T 转置,ndarray.reshape()数组相同更改尺寸,ndarray.resize()都是生成新的数组开辟新的内存区域,而非直接更改原有数组,而ndarray.shape是更改原有数组。

ar1=np.arange(9)
ar2=np.zeros((2,5),dtype=np.int)
print(ar1)
print(ar2)
print('\n-------')

#T 转置 一位数组转置结果不变
print(ar1.T)
print(ar2.T)
print('\n-------')

#reshape只能变成元素数相同的不同尺寸矩阵
print(ar1.reshape(3,3))#已有数组改变形状
print(np.arange(8).reshape(2,4))#生成数组同时改变形状
print(np.reshape(np.arange(8),(2,4)))
print('\n-------')

#resize 在元素不够时会进行排序来生成新矩阵
print(np.resize(ar1,(3,3)))
print(np.resize(ar1,(3,4)))

#shape也可以用来修改数组
ar=np.arange(30)
ar.shape=2,-1,3#-1表示按照其他维数确定该项
print(ar.shape)
print(ar)
ar.shape=-1,5,6
print(ar.shape)
print(ar)
'''

[0 1 2 3 4 5 6 7 8]
[[0 0 0 0 0]
 [0 0 0 0 0]]

-------
[0 1 2 3 4 5 6 7 8]
[[0 0]
 [0 0]
 [0 0]
 [0 0]
 [0 0]]

-------
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[0 1 2 3]
 [4 5 6 7]]
[[0 1 2 3]
 [4 5 6 7]]

-------
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[0 1 2 3]
 [4 5 6 7]
 [8 0 1 2]]
(2, 5, 3)
[[[ 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]]]
(1, 5, 6)
[[[ 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]]]
'''
数组复制copy
# 数组的复制
ar1 = np.arange(10)
ar2 = ar1
print(ar2 is ar1)
ar1[2] = 9
print(ar1,ar2)
# ar1和ar2指向同一个值,所以ar1改变,ar2一起改变

ar3 = ar1.copy()
print(ar3 is ar1)
ar1[0] = 9
print(ar1,ar3)
# copy方法生成新数组及其数据的完整拷贝
#copy方法常与切片一起使用,删除原数组后新数组仍被保留
ar4=ar1[:5].copy()
del ar1
print(ar4)
'''
True
[0 1 9 3 4 5 6 7 8 9] [0 1 9 3 4 5 6 7 8 9]
False
[9 1 9 3 4 5 6 7 8 9] [0 1 9 3 4 5 6 7 8 9]
[9 1 9 3 4]
'''
数据类型转换 ndarray.astype
ar1=np.arange(3,dtype=float)
ar2=ar1.astype(np.int32)
print(ar1,ar1.dtype)
print(ar2,ar2.dtype)
'''
[0. 1. 2.] float64
[0 1 2] int32
'''
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值