numpy:入门

为什么需要numpy:Python中的l数据类型list占用资源过大,不适合做大量计算;数据类型array又只能存储一维数组。所以引入numpy来处理多维数组的存储和计算。
摘要由CSDN通过智能技术生成

为什么需要numpy:Python中的l数据类型list占用资源过大,不适合做大量计算;数据类型array又只能存储一维数组。所以引入numpy来处理多维数组的存储和计算。

一.创建数组(ndarray)

1.直接创建

np.array(object)

>>> import numpy as np
>>> a=np.array([[0,1,2],[1,2,3]])
>>> a
array([[0, 1, 2],
       [1, 2, 3]])

2.利用内置函数

np.zeros(shape),np.ones(shape),np.arange(start,stop,step),np.linspace(start,stop,num=50),np.random.rand(do,d1,.,dn),np.random.randint(low,high,size=None)

>>> np.zeros((2,2))
array([[ 0.,  0.],
       [ 0.,  0.]])
>>> np.ones((2,2))
array([[ 1.,  1.],
       [ 1.,  1.]])
>>> np.arange(0,10,1)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(0,9).reshape((3,3))
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> np.linspace(0,10,11)
array([  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.])
>>> np.random.rand(2,2)
array([[ 0.11611405,  0.85913958],
       [ 0.11487685,  0.96038192]])
>>> np.random.randint(0,10,(3,3))
array([[8, 3, 8],
       [9, 5, 9],
       [3, 1, 0]])

打印数组:

一维数组print为row,二维数组print为matrices,三维数组print为list of matrices

>>> print(np.arange(0,4))
[0 1 2 3]
>>> print(np.zeros((2,2)))
[[ 0.  0.]
 [ 0.  0.]]
>>> print(np.random.randint(0,10,(3,3)))
[[4 3 2]
 [5 9 3]
 [1 5 4]]

二:对数组的基本操作

1.代数运算:+,-,×(这里是各对应元素相乘,不是矩阵乘法)

>>> a=np.arange(0,4).reshape((2,2))
>>> a
array([[0, 1],
       [2, 3]])
>>> b=a*a
>>> b
array([[0, 1],
       [4, 9]])
>>> a+b
array([[ 0,  2],
       [ 6, 12]])
>>> a-b
array([[ 0,  0],
       [-2, -6]])
2.矩阵乘法:np.dot(a,b)

>>> np.dot(a,b)
array([[ 4,  9],
       [12, 29]])
若参数为两个一维数组,则可看成是两个向量的点乘

>>> np.dot(np.array([1,2,3]),np.array([1,3,6]))
25

注意:当两个类型不同的数组进行运算后,结果将是更一般的类型。

>>> c=np.arange(4)	#np.arange()默认类型为np.int32
>>> d=np.linspace(0,3,4)	#np.linspace()默认类型为np.float64
>>> c+d
array([ 0.,  2.,  4.,  6.])
>>> (c+d).dtype
dtype('float64')


3.逻辑运算:<,>,==

>>> a
array([[0, 1],
       [2, 3]])
>>> b
array([[0, 1],
       [4, 9]])
>>> a<b
array([[False, False],
       [ True,  True]], dtype=bool)
>>> a==b
array([[ True,  True],
       [False, False]], dtype=bool)

4.ndarray class中有许多函数实现了对数组对一元运算。比如求数组中的最大值,最小值,所有元素之和等

>>> a
array([[0, 1],
       [2, 3]])
>>> a.sum()    #所有元素之和
6
>>> a.sum(axis=0)    #列相加
array([2, 4])     
>>> a.sum(axis=1)    #行相加
array([1, 5])
>>> a.max()	#所有元素中对最大值
3
>>> a.max(axis=0)    #各列最大值
array([2, 3])
>>> a.max(axis=1)    #各行最大值
array([1, 3])

5.Universal Functions(ufunc)
比如sqrt,sin,cos,exp,max,min,argmax,argmin,sum,trace等等
,这个参见另一篇博文,专门介绍numpy的universal function

三:索引(indexing),切片(slicing),迭代(iterating)
1.一维数组对索引,切片和迭代跟python中对list对操作一样。
>>> a=np.arange(10)
>>> a[5]
5
>>> a[5:]
array([5, 6, 7, 8, 9])
>>> a[5:10:2]
array([5, 7, 9])
>>> for i in a[:3]:
...     print(i)
... 
0
1
2

2.多维数组有多个axis,所以每一个axis需要一个索引。
>>> a=np.arange(6).reshape(2,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5]])
>>> a[1,1]
4
>>> a[:,:2]
array([[0, 1],
       [3, 4]])
>>> for row in a:
...     print(row)
... 
[0 1 2]
[3 4 5]

四.改变数组的形状(shape)
array.ravel(),array.reshape(a,b),a.T(),array.resize(a,b) (只有resize()会直接改变数组)
>>> a
array([[0, 1, 2],
       [3, 4, 5]])
>>> a.ravel()
array([0, 1, 2, 3, 4, 5])
>>> a
array([[0, 1, 2],
       [3, 4, 5]])
>>> a.reshape(3,2)
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> a.T
array([[0, 3],
       [1, 4],
       [2, 5]])
>>> a.resize(3,2)
>>> a
array([[0, 1],
       [2, 3],
       [4, 5]])

五:合并数组,分割数组
np.vstack(a,b):垂直方向合并; np.vsplit(a,n):垂直方向分割
np.hstack(a,b):水平方向合并;  np.hsplit(a,n):水平方向分割
>>> np.vstack((np.zeros((2,2)),np.ones((2,2))))
array([[ 0.,  0.],
       [ 0.,  0.],
       [ 1.,  1.],
       [ 1.,  1.]])
>>> np.hstack((np.zeros((2,2)),np.ones((2,2))))
array([[ 0.,  0.,  1.,  1.],
       [ 0.,  0.,  1.,  1.]])
>>> a=np.arange(12).reshape(2,6)
>>> a
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11]])
>>> np.hsplit(a,2)
[array([[0, 1, 2],
       [6, 7, 8]]), array([[ 3,  4,  5],






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值