天天看点

Numpy数值计算基础——创建数组对象、设置shape属性、生成随机数、数组索引、展平、组合、分割

Numpy提供两种基本的对象:ndarray(存储单一数据类型的多维数组)和ufunc(对数组进行处理的函数)。

import numpy as np

## 创建一维、二维数组
arr1=np.array([1,2,3,4])             #创建一维数组 (一个[])
arr2=np.array([[1,2,3,4],[5,6,7,8]]) #创建二维数组(两个[])
print(arr2.shape)                    #查看数组结构,返回tuple,对于n行m列的矩阵,形状为(n,m)
print(arr2.ndim)                     #返回数组的维数(int)
print(arr2.size)                     #返回数组元素的总和,等于数组形状的乘积mn(int)
print(arr2.dtype)                    #返回data-type数组中元素类型(eg:int32)
print(arr2.intesize)                 #返回数组的每一个元素所占字节(int)

## 重新设置shape属性
arr2.shape=4,3
print(arr2)
#也可以用reshape函数
print(arr2.reshape(4,2))
print(arr2.reshape(4,2).ndim)        #查看重设后的数组维度

## Numpy专门提供许多创建数组的函数
print(np.arange(1,10,2))             #arange类似python自带的range函数(始值,终值,步长)
print(np.linspace(0,1,12))           #linspace指定始值,终值,元素个数来创建一维数组
print(np.logspace(0,2,20))           #创建等比数组,生成1(10^0)-100(10^2)的20个元素的等比数列

print(np.ones(5,3))                  #全1数组
print(np.diag([1,2,3,4]))            #对角线上可为其他指定元素,其他位置为0
print(np.eye(3))                     #主对角线元素为1,其他位置0
print(np.zeors(2,3))                 #全0数组

#生成随机数:random模块
print(np.random.random(100))         #生成100个随机数
print(np.random.rand(10,5))          #rand函数产生服从均匀分布的随机数,10行5列
print(np.random.randn(10,5))         #randn函数生成服从正态分布的随机数
print(np.random.randint(2,10,size=[2,5]))
#randint给定上下范围的随机数,randint(low,high=None,size=None,dtype='1'),size为数组的shape

#数组索引
#一维数组的索引与list差不多
print(arr1[5])                       #用整数作为下标获取数组中某个元素
print(arr1[3:5])                     #用范围作为下标获取一个切片,包括arr[3],不包括arr[5]
print(arr1[:5])                      #省略开始下标,从arr1[0]开始
arr1[2:4]=100,101                    #下标还可以用来修改数组的值
print(arr1[1:-1:2])                  #第三个参数表示步长
print(arr2[0,3:5])                   #索引第0行中第3和4列的元素
print(arr2[:,2])                     #索引第二列元素,多维数组索引:各维度的索引之间用‘,’隔开

#数组展平
print(arr2.ravel())                  #使用ravel函数可以使数组展平,成一维。             
print(arr2.flatten())                #flatten可以选择横向或纵向展平,此处横向展平
print(arr2.flatten('F'))             #纵向展平

#对数组进行组合
print(np.concatenate((arr1,arr2),axis=1))  #参数axis=1时按照横轴组合,
print(np.concatenate((arr1,arr2),axis=0))  #参数axis=0时按照纵轴组合
print(np.hstack((arr1,arr2)))              #hstack按照横轴组合
print(np.vstack((arr1,arr2)))              #vstack按照纵向组合

#对数组进行分割
print(np.hsplit(arr2,2))                   #hsplit实现横向分割,按行分成2部分
print(np.vsplit(arr2,2))                   #vsplit进行纵向分割,按列分成2部分
print(np.split(arr2,2,axis=1))             #split进行分割时,参数axis=1横向分割,0纵向分割