numpy的学习(一)什么是numpy以及numpy的基础数据结构数组(创建数组以及数组的基本属性)
- 创建数组( np.array()、np.arange()、np.linspace()、np.zeros()、np.zeros_like()、np.ones()、np.ones_like()、np.eye() 、np.random.rand(10).reshape(2,5))
- 数组的基本属性(ndim、shape、size、dtype、itemsize)
numpy是python开源的科学计算工具包,numpy还可以进行矩阵运算。python无法完成矩阵运算。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
一个强大的N维数组对象 ndarray
对数组结构数据进行运算(不用遍历循环)
线性代数、傅里叶变换、随机数生成等功能
numpy的基础数据结构——ndarray
numpy数组是一个多维数组,称为ndarray。
数组和列表:
import numpy as np
#numpy和列表的形式区别(有无逗号)
ar = np.array([1,2,3,4,5])
list1 = [1,2,3,4,5]
print(ar,type(ar)) #输出结果中没有逗号分隔
print(list1,type(list1))#输出结果中有逗号分隔
(1)创建数组
array()函数
array()函数创建一维数组(注意嵌套序列数量不一,会怎样)
import numpy as np
#创建数组 array()函数,括号内可以是列表,元组,数组,生成器等。更多的是用列表或者生成器。
ar1 = np.array(range(10)) #整型
ar2 = np.array([1,2,3.14,5]) #浮点型
ar3 = np.array([True,False,True]) #布尔型
#注意嵌套序列数量不一,会怎样
ar4 = np.array([[1,2,3],('a','b','c','d')])
ar5 = np.array([[1,2,3],[10,3,5,8]])
print('ar1: ',ar1,ar1.shape,type(ar1),ar1.dtype) #一维数组,一共10个元素
print('ar2: ',ar2,ar2.shape,type(ar2),ar2.dtype) #一维数组,一共4个元素
print('ar3: ',ar3,ar3.shape,type(ar3),ar3.dtype) #一维数组,一共三个元素
#!!!!注意下面的输出结果
print('_______________________')
print('ar4: ',ar4,ar4.shape,type(ar4),ar4.dtype) #一维数组,一共两个元素
print((ar4[0]),type(ar4[0]),type(ar4[1]))
print('ar5: ',ar5,ar5.shape,type(ar5),ar5.dtype) #一维数组,一共两个元素
print((ar5[0]),type(ar5[0]),type(ar5[1]))
array()函数创建二维数组
#二维数组
#注意嵌套序列数量一样和不一样的对比结果
ar1 = np.array([[1,2,3],('a','b','c')])#二维数组,嵌套序列(列表。元组均可)
ar2 = np.array([[1,2,3],[5,2,7]])#二维数组,嵌套序列(列表。元组均可)
ar3 = np.array([[1,2,3],('a','b','c','d')])
print('ar1: ',ar1,ar1.shape,type(ar1),ar1.dtype) #二维数组,两行三列
print('ar2: ',ar2,ar2.shape,type(ar2),ar2.dtype) #二维数组,两行三列
print('ar3: ',ar3,ar3.shape,type(ar3),ar3.dtype) #一维数组,一共两个元素
arange()创建数组
#创建数组arange([start,] stop[, step,], dtype=None)
ar1 = np.arange(10) #0-9的整型
ar2 = np.arange(10.0) #浮点型
ar3 = np.arange(5.0,9.0)
ar4 = np.arange(5,9,2)#步长为2
print(ar1,type(ar1))
print(ar2)
print(ar3)
print(ar4)
补充:range和arange()
range()返回的是range object,而np.arange()返回的是numpy.ndarray
两者都是均匀地(evenly)等分区间;
range仅可用于迭代,而np.arange作用远不止于此,它是一个序列,可被当做向量使用。
range()不支持步长为小数,np.arange()支持步长为小数
两者都可用于迭代
两者都有三个参数,以第一个参数为起点,第三个参数为步长,截止到第二个参数之前的不包括第二个参数的数据序列。即左闭右开的区间。[first, last)或者不加严谨地写作[first:step:last)
np.linspace():
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
返回在间隔[开始,停止]上计算的num个均匀间隔的数字(样本)。
start开始值,stop结束值,
num生成的样本数,非负数,默认是50
endpoint 若为True,“stop”是最后的样本;否则“stop”将不会被包含。默认为True
retstep若为False,返回样本array;否则返回一个包含两个元素的元组(array样本,步长)。默认为False
#创建数组np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
#返回
ar1 = np.linspace(2,3,5)
ar2 = np.linspace(2.0,3.0,5,endpoint=False)
ar3 = np.linspace(2.0,3.0,5,retstep=True)
print('ar1: ',ar1,type(ar1))
print('ar2: ',ar2,type(ar2))
print('ar3: ',ar3,type(ar3))
print(ar3[0],type(ar3[0]))
创建数组zeros()、zeros_like()、ones()、ones_like()
#np.zeros(shape, dtype=float)
#shape:数组形状,二维以上需要用(),且输入的参数为整数
#dtype:数据类型,默认为numpy.float64
#np.ones()与np.zeros()一样,只不过填充的是1
ar1 = np.zeros(5)
ar2 = np.zeros((2,2),dtype=np.int)
ar3 = np.zeros((2,2,3))
print("ar1: ",ar1,type(ar1),ar1.dtype,ar1.shape)
print("ar2: ",ar2,type(ar1),ar2.dtype,ar2.shape)
print("ar3: ",ar3,type(ar3),ar3.dtype,ar3.shape)
#np.ones_like(a, dtype=None) 返回具有给定数组相同的形状和类型的全1数组
#np.zeros_like()与之一样,只不过填充的是0
a = np.array([[1,4,6,3,6],[4,5,6,9,7]])
ar4 = np.ones_like(a,dtype=np.float)
print("ar4: ",ar4,type(ar4),ar4.dtype,ar4.shape)
创建数组np.eye()
更多np.eye()函数用法链接
np.eye()
函数的原型:numpy.eye(N,M=None,k=0,dtype=<class ‘float’>,order=‘C)
返回的是一个二维2的数组(N,M),对角线的地方为1,其余的地方为0.
参数介绍:
(1)N:int型,表示的是输出的行数
(2)M:int型,可选项,输出的列数,如果没有就默认为N
(3)k:int型,可选项,对角线的下标,默认为0表示的是主对角线,负数表示的是低对角,正数表示的是高对角。
(4)dtype:数据的类型,可选项,返回的数据的数据类型
(5)order:{‘C’,‘F’},可选项,也就是输出的数组的形式是按照C语言的行优先’C’,还是按照Fortran形式的列优先‘F’存储在内存中。
#创建数组 np.eye(N, M=None, k=0, dtype=<class 'float'>, order='C')
#创建一个N*N的单位矩阵,对角线值为1,其余为0
ar1 = np.eye(3,dtype=np.int)
print('ar1:')
print(ar1)
ar2 = np.eye(3,2)
print('ar2:')
print(ar2)
ar3 = np.eye(3,4,k=2)
print('ar3:')
print(ar3)
创建数组更常用的方式
#创建数组
#创建数,然后再定义形状。
print(np.random.rand(10).reshape(2,5))
(2)数组的基本属性
ar = np.random.rand(12).reshape(2,3,2)
print(ar.shape) #数组的形状,对于一位数组shpe为(N,)。对于N行M列的二维数组shape为(N,M)。
print(ar.ndim) #数组的维度或说成数组的秩
print(ar.size) #数组中元素的总个数
print(ar.dtype) #数组中元素的类型
print(ar.itemsize) #数组中每个元素的字节大小。int32字节为4,float64字节是8
本文地址:https://blog.csdn.net/leilei7407/article/details/107312527