限制我们的不是学历,而是格局!
目录
2.使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等
一.数据的维度
1.一维数据
一维数据由对等关系的有序或无序数据构成,采用线性方程组织,对应列表,数组和集合等概念
(1)线性方式组织:
3 1 3 4 5 66 7
(2)列表和数组区别:
列表:数据类型可以不同
3.14 3.12 ‘python’ [3.14]
数组:数据类型相同
1 2 3 4 5 6 7
2.二维数据
二维数据由多个一维数据构成,是一维数据的组合形式,表格是典型的二维数据
3.多维数据
多维数据由一维或多维数据在新维度上扩展形成
4.高维数据
高维数据仅利用最基本的二元关系展示数据间的复杂结构
{
"name":"myun",
"love":"sing",
"address":{
"school":"延大",
"zipcode":"12312"
},
"prof":["Computer System","Security"]
}
5.数据维度的python表示
一维数据:列表和集合类型 [3.14 , 3.12 , 3.16]有序
{3.14 , 3.13 , 3.16}无序
二维数据:列表类型 [ [3.14 , 3.12 , 3.15] , [3.21 , 3.18] ]
多维数据:列表类型
高维数据:字典类型或数据类型表示
dict={
“name”:“myun”,
“age”:21,
}
或者 JSON,XML和YAML格式
二.NumPy的数据对象:ndarray
NumPy是一个开源的Python科学计算基础库,包含:
·一个强大的N维数组对象ndarray
·广播功能函数
·整合C/C++/Fortran代码的工具
·线性代数,傅里叶变换,随机数生成等功能
NumPy是SciPy,Pandas等数据处理或科学计算库的基础
1.NumPy的引用
格式:
import numpy as np
<!--np为引入块的别名-->
2.N维数组的对象:ndarray
(1)ndarray是一个多维度数组对象,由两部分构成:
·实际数据
·描述这些数据的元数据(数据维度,数据类型)
ndarray数组一般要求所有元素类型相同,数组下表从0开始
ndarray实例:
import numpy as np
a = np.array([[0,1,2],
[3,4,5]])
print(a)
'''输出:
[[0 1 2]
[3 4 5]]'''
array是ndarray在程序中的别名。
3.ndarray对象的属性
属性 | 说明 |
.ndim | 秩,即轴的数量或维度的数量 |
.shape | ndarray对象的尺度,相当于矩阵,n行m列 |
.size | ndarray对象元素的个数,相当于.shape的n*m的值 |
.itmesize | ndarray对象中每个元素的大小,以字节为单位 |
例如:
import numpy as np
a=np.array([[1,2,3],
[5,6,7]])
print("秩:",a.ndim)
print("尺度:",a.shape)
print("个数:",a.size)
print("元素类型:",a.dtype)
print("元素大小:",a.itemsize)
'''输出
秩: 2
尺度: (2, 3)
个数: 6
元素类型: int32
元素大小: 4'''
非同质的ndarray对象:
import numpy as np
a=np.array([[1,2,3,8],
[5,6,7]]) #ndarray数组可以由非同质对象构成
print("秩:",a.ndim)
print("尺度:",a.shape)
print("个数:",a.size)
print("元素类型:",a.dtype) #非同质ndarray元素为对象类型
print("元素大小:",a.itemsize) #非同质ndarray对象无法发挥NumPy的优势,尽量避免使用
'''
秩: 1
尺度: (2,)
个数: 2
元素类型: object
元素大小: 8
'''
三.ndarray数组的元素类型
四.ndarray数组的创建
1.从python中列表,元组等类型创建ndarray数组
x=np.array(list/tuple)
x=np.array(list/tuple,dtype=np.float32)
当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型
代码:
import numpy as np
a=np.array([0,1,2]) #从列表类型创建
b=np.array((3,4,5)) #从元组类型创建
c=np.array([[1,2,3],[4,5,6],(7,8,9)]) #从列表和元组混合类型创建
print('a:',a)
print('b:',b)
print('c:',c)
'''
a: [0 1 2]
b: [3 4 5]
c: [[1 2 3]
[4 5 6]
[7 8 9]]
'''
2.使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等
函数 | 说明 |
np.arange(n) | 类似range()函数,返回ndarray类型,元素从0到n-1 |
np.ones(shape) | 根据shape生成一个全1数组,shape是元组类型 |
np.zeros(shape) | 根据shape生成一个全0数组,shape是元组类型 |
np.full(shape,val) | 根据shape生成一个数组,每个元素值都是val |
np.eye(n) | 创建一个正方的n*n单位矩阵,对角线为1,其余为0 |
np.linspace() | 根据起止数据等间距地填充数据,形成数组 |
np.concatenate() | 将两个或多个数组合并成一个新的数组 |
arange函数创建:
import numpy as np a=np.arange(10) print(a) #输出:[0 1 2 3 4 5 6 7 8 9]
ones函数创建:
import numpy as np a=np.ones((3,4)) print(a) '''输出: [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] ''' b=np.ones((2,3,2)) #输出两个3行2列的矩阵 print(b) '''输出 [[[1. 1.] [1. 1.] [1. 1.]] [[1. 1.] [1. 1.] [1. 1.]]] '''
zeros函数创建:
import numpy as np a=np.zeros((3,4),dtype=np.int32) print(a) '''输出 [[0 0 0 0] [0 0 0 0] [0 0 0 0]] '''
eye函数创建:
import numpy as np a=np.eye(4) print(a) '''输出 [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] '''
五.ndarray数组的变换
对于创建后ndarray数组,可以对其进行维度变换和元素类型变换
a=np.ones((2,3,4),dtype=np.int32)
1.ndarray数组的维度变换
方法 | 说明 |
.reshape(shape) | 不改变数组元素,返回一个shape形状的数组,原数组不变 |
.resize(shape) | 与.reshape()功能一样,但修改原数组 |
.swapaxes(ax1,ax2) | 将数组n个维度中两个维度进行调换 |
.flatten() | 对数组进行降维,返回折叠后的一堆数组,原数组不变 |
维度变换代码:
reshape方法:
import numpy as np a=np.ones((2,3,4),dtype=np.int32) a=a.reshape((3,8)) #将两个3行4列的矩阵变换为3行8列的矩阵 print(a) ''' 输出: [[1 1 1 1 1 1 1 1] [1 1 1 1 1 1 1 1] [1 1 1 1 1 1 1 1]] '''
resize方法:
import numpy as np a=np.ones((2,3,4),dtype=np.int32) a.resize((3,8)) #将两个3行4列的矩阵变换为3行8列的矩阵 print(a) #resize修改原数组,但reshape不会修改原数组 ''' 输出: [[1 1 1 1 1 1 1 1] [1 1 1 1 1 1 1 1] [1 1 1 1 1 1 1 1]] '''
flatten方法:
import numpy as np a=np.ones((2,3,4),dtype=np.int32) b=a.flatten() #对数组进行降维,返回折叠后的一维数组,原数组不变 print(b) ''' 输出: [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] '''
2.ndarray数组的类型变换
格式:
new_a=astype(new_type)
代码:
import numpy as np
a=np.ones((2,3,4),dtype=np.int32)
b=a.astype(np.float_)
print(b)
'''
输出:
[[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]]
'''
3.ndarray数组的向列表的变换
格式:
ls=a.tolist()
代码:
import numpy as np
a=np.full((2,3,4),6,dtype=np.int32)
b=a.tolist()
print('数组:',a)
print('变列表后:',b)
'''
输出:
数组: [[[6 6 6 6]
[6 6 6 6]
[6 6 6 6]]
[[6 6 6 6]
[6 6 6 6]
[6 6 6 6]]]
变列表后: [[[6, 6, 6, 6], [6, 6, 6, 6], [6, 6, 6, 6]], [[6, 6, 6, 6], [6, 6, 6, 6], [6, 6, 6, 6]]]
'''
六.ndarray数组的操作
数组的索引也切片:
·索引:获取数组中特定位置元素的过程
·切片:获取数组元素子集的过程
1.一维数组的索引和切片
代码:
import numpy as np
a=np.array([5,8,2,9,4])
b=a[2]
c=a[0:4:2] #3元素冒号分割,起始编号:(不包含)终止编号:步长
print('下标为2的元素:',b)
print('从0~4步长为2的元素:',c)
'''
输出
下标为2的元素: 2
从0~4步长为2的元素: [5 2]
'''
2.多维数组的索引和切片
(1)多维数组的索引:
import numpy as np
a=np.arange(24).reshape((2,3,4))
b=a[1,2,3] #第2个矩阵3行4列的值
c=a[0,2,3] #第1个矩阵3行4列的值
d=a[-1,-2,-3] #倒数第一个矩阵倒数第2行倒数第3列的值
print('原数组:',a)
print('第2个矩阵3行4列的值:',b)
print('第1个矩阵3行4列的值:',c)
print('倒数第一个矩阵倒数第2行倒数第3列的值:',d)
'''
原数组: [[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
第2个矩阵3行4列的值: 23
第1个矩阵3行4列的值: 11
倒数第一个矩阵倒数第2行倒数第3列的值: 17
'''
(2)多维数组的切片:
import numpy as np
#[:,切片位置,切片个数]
a=np.arange(24).reshape((2,3,4))
b=a[:,1,-3] #选取一个维度用:,表示第一行倒数第三列的值
c=a[:,1:3,:] #选取每个维度1~3行所有元素(不包含3行)
d=a[:,:,::2] #每一个维度选取步长为2的元素
print('原数组:\n',a)
print('第一行倒数第三列的值:\n',b)
print('取每个维度1~3行所有元素:\n',c)
print('每一个维度选取步长为2的元素:\n',d)
'''原数组:
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
第一行倒数第三列的值:
[ 5 17]
取每个维度1~3行所有元素:
[[[ 4 5 6 7]
[ 8 9 10 11]]
七.ndarray数组的运算
1.数组与标量之间的运算
数组与标量的运算作用于数组的每一个元素
代码:
import numpy as np
#[:,切片位置,切片个数]
a=np.arange(24).reshape((2,3,4))
b=a.mean() #所有元素的平均值
c=a/b #计算a与所有元素的平均值的商,运算作用于所有元素
print('原数组:\n',a)
print('元素平均值:\n',b)
print('计算a与所有元素的平均值的商:\n',c)
'''原数组:
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
元素平均值:
11.5
计算a与所有元素的平均值的商:
[[[0. 0.08695652 0.17391304 0.26086957]
[0.34782609 0.43478261 0.52173913 0.60869565]
[0.69565217 0.7826087 0.86956522 0.95652174]]
[[1.04347826 1.13043478 1.2173913 1.30434783]
[1.39130435 1.47826087 1.56521739 1.65217391]
[1.73913043 1.82608696 1.91304348 2. ]]]
'''
2.NumPy一元函数
函数 | 说明 |
np.abs(x) np.fabs(x) | 计算数组各元素的绝对值 |
np.sqrt(x) | 计算数组各元素的平方根 |
np.square(x) | 计算数组各元素的平方 |
np.log(x) np.log10(x) np.log2(x) | 计算数组各元素的自然对数,以10底对数和以2为底对数 |
np.ceil(x) np.floor(x) | 计算数组各元素的ceiling值或floor值 |
np.rint(x) | 计算数组各元素四舍五入值 |
np.modf(x) | 将数组各元素的小数部分和整数部分以两个独立数组形式返回 |
np.cos(x) np.cosh(x) np.sin(x) np.sinh(x) np.tan(x) np.tanh(x) | 计算数组各元素的普通型和双曲型三角函数 |
np.exp(x) | 计算数组各元素的指数 |
np.sing(x) | 计算数组各元素的符号值,1(+), 0, -1(-) |
代码:
square函数:
import numpy as np a=np.arange(24).reshape((2,3,4)) b=np.square(a) print('原数组:\n',a) print('a的平方:',b) '''原数组: [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] a的平方: [[[ 0 1 4 9] [ 16 25 36 49] [ 64 81 100 121]] [[144 169 196 225] [256 289 324 361] [400 441 484 529]]] '''
sqrt函数:
import numpy as np a=np.arange(24).reshape((2,3,4)) b=np.sqrt(a) print('原数组:\n',a) print('a的平方根:\n',b) '''原数组: [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] a的平方根: [[[0. 1. 1.41421356 1.73205081] [2. 2.23606798 2.44948974 2.64575131] [2.82842712 3. 3.16227766 3.31662479]] [[3.46410162 3.60555128 3.74165739 3.87298335] [4. 4.12310563 4.24264069 4.35889894] [4.47213595 4.58257569 4.69041576 4.79583152]]] '''
modf函数:
import numpy as np a=np.arange(24).reshape((2,3,4)) b=np.sqrt(a) c=np.modf(b) print('原数组:\n',a) print('modf方法:\n',c) '''原数组: [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] modf方法: (array([[[0. , 0. , 0.41421356, 0.73205081], [0. , 0.23606798, 0.44948974, 0.64575131], [0.82842712, 0. , 0.16227766, 0.31662479]], [[0.46410162, 0.60555128, 0.74165739, 0.87298335], [0. , 0.12310563, 0.24264069, 0.35889894], [0.47213595, 0.58257569, 0.69041576, 0.79583152]]]), array([[[0., 1., 1., 1.], [2., 2., 2., 2.], [2., 3., 3., 3.]], [[3., 3., 3., 3.], [4., 4., 4., 4.], [4., 4., 4., 4.]]])) '''
3.NumPy二元函数
函数 | 说明 |
+ - * / ** | 两个数组各元素进行对应运算 |
np.maximum(x,y) np.fmax() np.minimum(x,y) np.fmin() | 元素的最大值/最小值 |
np.mod(x,y) | 元素级的模运算 |
np.copysign(x,y) | 将数组y中各元素值的符号赋值给数组x对应元素 |
> < >= <= == != | 算术比较,产生布尔类型数组 |
代码:
import numpy as np a=np.arange(24).reshape((2,3,4)) b=np.sqrt(a) c=np.maximum(a,b) #元素最大值 d=a>b print('a数组:\n',a) print('b数组:\n',b) print('a,b数组最大值:\n',c) print('a是否等于b:\n',d) ''' a数组: [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] b数组: [[[0. 1. 1.41421356 1.73205081] [2. 2.23606798 2.44948974 2.64575131] [2.82842712 3. 3.16227766 3.31662479]] [[3.46410162 3.60555128 3.74165739 3.87298335] [4. 4.12310563 4.24264069 4.35889894] [4.47213595 4.58257569 4.69041576 4.79583152]]] a,b数组最大值: [[[ 0. 1. 2. 3.] [ 4. 5. 6. 7.] [ 8. 9. 10. 11.]] [[12. 13. 14. 15.] [16. 17. 18. 19.] [20. 21. 22. 23.]]] a是否等于b: [[[False False True True] [ True True True True] [ True True True True]] [[ True True True True] [ True True True True] [ True True True True]]] '''
未完待更........