目录
首先导入numpy包
import numpy as np
ndarray是存储单一数据类型的多维数组,在下面的代码中,我们可以看到事实上array是可以输入不同的数据类型的。
arr1=np.array([1,2,3,4,5,6,'呵呵','a'])
print("创建的数组为:{}".format(arr1),type(arr1))
但是建议将ndarray数组存储为单一数据类型,否则在数据转换时可能会出现问题。
arr1=np.array([1,2,3,4,5,6,'呵呵','a'])
print("创建的数组为:{}".format(arr1),arr1.dtype(int))
1.数组的简单创建
接下来我们就来看一下n维数组的简单创建,这里我们展示一至三维数组的创建方式
#创建一维数组
arr1=np.array([1,2,3,4,5,6])
print("创建的一维数组为:{}".format(arr1))
#创建二维数组
arr2=np.array([[1,2,3],[4,5,6],[7,8,9]])
print("创建的二维数组为:{}".format(arr2))
#创建三维数组
arr3=np.array([[[1,2,3],[4,5,6],[7,8,9]],[[10,11,12],[13,14,15],[16,17,18]]])
print("创建的三维数组为:{}".format(arr3))
数组的属性
属性 | 说明 |
ndim | 返回int。表示数组的维数 |
shape | 返回tuple。表示数组的尺寸 |
dtype | 返回data-type。描述数组中的元素类型 |
size | 返回int。表示数组的袁术总数,等于数组形状的乘积 |
itemsize | 返回int。表示数组的每个元素的大小(以字节为单位) |
arr2=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr2.ndim)
print(arr2.shape)
print(arr2.dtype)
print(arr2.size)
print(arr2.itemsize)
如何修改数组的形状
我们以二维数组为例
这里我们使用shape函数,将原本3×3的二维数组修改成9×1的二维数组
arr2=np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2.shape=9,1
print(arr2)
这里我们还可以使用reshape函数,reshape函数的定义是将数据赋值给一个新的变量,所以对使用reshape函数本身的数组是不会受到影响的。
arr2=np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2.reshape(9,1)
arr3=arr2.reshape(9,1)
print(arr2)
print(arr3)
此处我们还有一个小技巧,我们的两种重塑数组形状的方式中,其中的行和列我们其实只要输入一个数据就行,另一个数据我们可以使用-1来替代,让我们的程序自己计算这个值应该为多少
arr2=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(arr2)
arr2.shape=3,-1
print(arr2)
arr2.shape=-1,2
print(arr2)
数组的转置
arr2=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(arr2)
print(arr2.T)
2.数组生成函数
np.zero() | 生成全0数组 |
np.ones() | 生成全1数组 |
np.empty() | 创建未初始化的数组 |
np.eye(n) | 声称特征矩阵 |
np.full(n,num) | 生成指定维度、指定数值的数组 |
np.diag(list) | 生成对角矩阵 |
arr1=np.zeros(10)
print(arr1)
arr2=np.ones(10)
print(arr2)
arr3=np.empty(10)
print(arr3)
arr4=np.eye(5)
print(arr4)
arr5=np.full(3,5)
print(arr5)
arr6=np.diag([1,2,3])
print(arr6)
np.ones_like(array) | 生成一个与array形状一样的数组,其它也类似 |
arange(b,e,s) | 创建等差数列,包含初始值b,不包含终值e,相当于python中的range(),s为步长 |
linspace(b,e,n) | 创建等差数列,包含初始值b和终值b和终值e,n为创建的元素个数 |
logspace(b,e,n) | 创建等比数列,包含初始值(10^b)和终值(10^e) |
np.ones_like(array)的简单使用
arr1=np.ones([5,5])
print(arr1)
arr2=np.ones_like(arr1)
print(arr2)
以下是arange(b,e,s)的简单使用
arr1=np.arange(10,90,5)
print(arr1)
linspace(b,e,n)的简单使用
arr1=np.linspace(10,90,5)
print(arr1)
logspace(b,e,n)的简单使用
arr1=np.logspace(1,5,10)
print(arr1)
3.数据类型
类型 | 描述 |
bool | 用一位存储的布尔类型(值为TRUE或FALSE) |
int | 整数,int8~int64,inti由平台决定(一般为int32或int64) |
uint | 无符号整数,uint8~unit64 |
float | 浮点数,float16~float64 |
complex | 复数,complex64~complex128 |
string | 字符型数据 |
import sys
arr1=np.array([1,2,3],dtype=np.float64)
arr2=np.array([1,2,3],dtype='i4')
print(arr1,sys.getsizeof(arr1))
print(arr2,sys.getsizeof(arr2))
arr3=np.float32(arr1)
print(arr3,sys.getsizeof(arr3))
数据类型转化的方法
类型转换方法astype(),会生成一个新的数组
ndarray.astype(np.float64)
整数可以转换成浮点数,
浮点数可以转换成整数,保留整数部分
也可以将表达数字含义的字符转换成整数或浮点数
如果转换失败,会抛出一个ValueError
以下是相关的测试代码
arr1=np.array([1,3,4,5,6,78])
arr2=arr1.astype(np.float64)
print(arr1)
print(arr2)
arr1=np.array([1.1,3.312,4.443,5.43,6.434,78.434])
arr2=arr1.astype(np.int8)
print(arr1)
print(arr2)
arr1=np.array(['1.1','3.312','4.443','5.43','6.434','78.434'])
arr2=arr1.astype(np.float64)
print(arr1)
print(arr2)