numpy的安装
同样,anaconda内置有Numpy包
Numpy是用c语言实现的,运算速度比python快得多
import numpy as np
np.__version__
out: 1.18.5
使用Jupyter编辑器打印numpy包的版本
NumPy
ndarray对象
NumPy定义了一个n维数组对象,简称ndarray对象,它是一个一系列相同类型元素组成的数组集合。数组中的每个元素都占有相同大小的内存块。与c语言中的数组大致相同。
ndarray对象采用了数组的索引机制,存储方式几乎相同
ndarray参数
numpy.array(object,dtype=None,copy=True,order=None,subok=False,admin=0)
参数说明:
- object:可以是一个列表、元组,必须给定
- dtype:float,int,可强制转化
- 求一个数组的秩array.ndim
#创建实列
np.array([i for i in range(10) if i%2==0])
#得到array[0,2,4,6,8]
np.array([1,2,3,4.5,'5'])
#得到np.array(['1','2','3','4.5','5'])
#会自动往内存最大的类型转换
np.array([[1,2,3],('a','b','c')
])
#得到array([['1','2','3'],['a','b','c']])
#是一个二维数组
np.array([[1,2,3],('a','b','c','d')
])
#当嵌套序列数量不一样时,会转化为一维数组
#array([list(1,2,3),['a','b','c','d'])
np.array([1,2.5,3.1,4.0,5],dtype='int')
#得到array([1,2,3,4,5])向下取整。round()为四舍五入函数
对于第三个参数的说明:
my_list1 = [1,2,3,4]
my_list2 = mylist1
my_list2[1] = 10
#此时输出my_list1 = [1,10,3,4]
#为引用传值。
id(mylist1)#地址
id(mylist2)#地址
#两则的地址是一模一样的。
a = np.array([1,2,3,4])
b = np.array(a)
print('a:',id(a),'b:',id(b))
#结果a数组的地址与b地址不相同
#说明是引用不是赋值,修改b,a不会被修改
a = np.array([1,2,3,4])
b = a
print('a:',id(a),'b:',id(b))
#结果a数组的地址与b地址相同
#说明是引用赋值,修改b,a也会被修改
a = np.array([1,2,3])
print(id(a))b = np.array(a)
print(id(b))c = a.copy()
print(id(c))d = a
print(id(d))#b、c是值传递,d是地址传递
4.ndmin
a = np.array([1,2,3],ndmin = 2)
a.ndim
#输出2得到a为array([[1,2,3]])
5.subok参数,类型为bool值,默认False。True:代表使用object的内部数据类型,False:使用数组的数据类型
array属性
更改数组维数reshape
a = np.array(20)
#一维数组
a = np.array(20).reshape(4,5)
#改为4行5列的数组,且4*5==20不然报错
调整维度resize
numpy.resize(a,new shape)
如果新数组大于原始数组,则新数组将填充a的重复副本,
#a为2行2列
a=np.array([[0,1],[2,3]])
#一a为原数组创建2行3列的新数组
b23=np.resize(a,(2,3))
b23
#array([[0,1,2],
# [3,0,1]])
#将0,1,2,3循环填入数组中即填充的为数组的重复副本
#使用0填充需要
#array.resize(new_shape)
a.resize((3,4),refcheck = False)
array.size
#求数组元素个数,二维元素总个数
a.astype('int')
#创建a后强制更改元素类型
arange对象
numpy.arange(start,stop,step,dtype)
参数说明:
np.arange(10)
#array([0>>9])
np.arange(3.1)
#array([0.,1.,2.,3.])可指定为浮点
#而python原生range(3.1)为错误代码不能指定浮点数
x = np.arange(5,dtype = float)
# x = array([0.,1.,2.,3.,4.])
np.arange(10,20,2)
#array([10>>18])
len(x)
#求数组长度,不能求出二维元素总个数
array.size
#求数组元素个数,二维元素总个数
等差数列:linspace对象
用于生成等差数列
np.linspace(start,num=50,endpoint=True,retstep=False,dtype = None)
特点【】左闭右也闭
参数说明:
a = np.linspace(1,10,10)
a
#array([1.,2.,3.,4.,5.,6.,7.,8.,9.,10.])A = np.linspace(0,4,9)
#生成【0-4】均分的array浮点数组B = np.linspace(0,4.1,9)
#生成【0-4.1】均分的array浮点数组ar1 = np.linspace(2.0,3.0,num = 5 ,retstep = True)
#生成一个元组,第一个元素为array([2.,2.25,2.5,2.75,3.])
#第二个参数为步长,即每个元素之间的差值0.25
#(array([2.,2.25,2.5,2.75,3.]),0.25)
等比数列:logspace对象
np.logspace(start,stop,num= 50,endpoint=True,base = 10.0,dtype = None)
参数说明:
a = np.logspace(0,9,10,base = 2)
#array([1.,2.,4.,8.,16.,32.,64.,128.,256.,512,])
np.logspace(A,B,C,base = D)
- A:生成数组的起始值为D的A次方
- B:生成数组的结束值为D的B次方
- C:总共生成C个数
- D:指数型数组的底数为D,默认为10
# 我们先使用前3个参数,将[1,5]均匀分成3个数,得到1,3,5},
#然后利用第4个参数base=2(默认是10)使用指数函数可以得到最终输出结果{2^1,2^3,2^5}
np.logspace(1,5,3,base=2)
np.logspace(1.0,2.0, num=10)#等价于下面:
np.linspace(1.0,2.0, num=10)
print (a)
10*a
全0数列:zeros()
创建指定大小的数组,数组元素以0填充
numpy.zeros(shape,dtype=float,order = 'C')
参数说明:
#1.shape可以给一个数,表示一维的多少个0
np.zeros(5)
#默认为浮点数
#shape可以给一个元组表示维数与个数
np.zeros((2,2))
#2行2列的全0数组
#array([[0.,0.],
# [0.,0.]])
np.zeros((2,2,3))
#2块2行3列的全0数组,对于下面定义
array([[[0.,0.,0.],[0.,0.,0.]],[[0.,0.,0.],[0.,0.,0.]]])a = array([[1,2,3],[4,5,6]])
np.zeros_like(a)
#创建出与a数组形状相同、类型相同的全0数列
#array([[0,0,0],
# [0,0,0]])
- 全1数列:np.ones()
总结: