python中的数组和矩阵(numpy)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我们先创建一个 dtype 对象 persontype,它的参数是一个描述结构类型的各个 字段的字典。 字典有两个键:’names^nTormats、每个键对应的值都是一个列表。 hame^定义结构中每个字段 的名称,而 Tormats 侧定义每个字段的类型。这里我 们使用类型字符串定义字段类型:
• S30’:长度为30个字节的字符串类型,由于结构中的每个元素的大小必须同定, 因此 需要指定字符串的长度。
'offsets':[0,32,36],
print(a[0]['name']) b'zhang' //b 表示 bytes,无具体意义
8.ufunc 函数 ufunc 函数是 universal function 的缩写,它是一种能对数组中的每个元素进行运 算的函数。Numpy 中的许多 ufunc 函数是用 c 语言实现的,因此其运算速度非常 快。
(2)linspace()指定开始值、终值、元素个数创建等差数列的一维数组
(3)logspace()指定开始值、终值、元素个数创建等比数列的一维数组
(4)zeros() ones() empty()创建指定形状和类型的数组 full()将数组元素填充
为指定值
import numpy as np
a=np.arange(0,10,1)#指定步长的等差数列
print('-'*20)
print(b)
print('-'*20)
print(c)
print('-'*20)
print(d)
print('-'*20)
print(e)
print('-'*20)
print(f)
[0 1 2 3 4 5 6 7 8 9]
--------------------
[ 0.
[3,4,5]]) print(array) print('-'*30)
b=array.reshape(1,-1) print(b) [[1 2 3] [3 4 5]] -----------------------------[[1 2 3 3 4 5]] 3. 指定数组元素的类型 import numpy as np array=np.array([[1,2,3],
一、python 中的数组
1. 创建 numpy 的 array,并显示相关属性 import numpy as np array=np.array([[1,2,3],
[3,4,5]]) print(type(array))#变量类型 print('number of dim:',array.ndim)#维数 print('shape:',array.shape)#几行几列 print('size',array.size)#元素总数 print(array)
import numpy as np a=np.arange(0,4) b=np.arange(1,5) c=np.add(a,b) print('a:',a) print('b:',b) print('c:',c) a: [0 1 2 3] b: [1 2 3 4] c: [1 3 5 7]
二、python 中的矩阵
[3,4,5]]) x=np.arange(10,1,-1) print(x) a=x[[3,3,1,8]] print(a) a[2]=10 print(a) print(x) [10 9 8 7 6 5 4 3 2] [7 7 9 2] [ 7 7 10 2]
[10 9 8 7 6 5 4 3 2] 使用布尔数组获取数组中的元素 import numpy as np x= np.arange(5,0,-1) print(x) print('-'*30) a=x[np.array([True,False,True,False,True])] print(a) [5 4 3 2 1] -----------------------------[5 3 1] 6.多维数组 Numpy 采用元组作为多维数组的下表,元组中的每个元素和数组的每个轴对应。
[3,4,5]])
print(array.dtype)#打印数组元素类型, b=np.array([1,2,3,4],dtype=np.int64)#指定数组类型 print(b.dtype) int32 int64
4. 自动生成数组
(1)arange()指定开始值、终值、步长创建等差数列的一维数组
a[:,2]为: [ 2 12 22 32 42 52] a[2::2,::2]为: [[20 22 24] [40 42 44]]
7.结构数组 类似于 C 语言中的 struct 关键字创建结构体,numpy 中使用 dtype 自定义数
据类型。假设需定义一个结构数组,每个元素都有 name、age 和 weight 字段。 import numpy as np persontype=np.dtype({'names':['name','age','weight'],'formats':['S30 ','i','f']},align=True) a=np.array([("zhang",32,75.5),("wang",24,65.2)],dtype=persontype) print(a)
0.11111111 0.22222222 0.33333333 0.44444444 0.55555556
0.66666667 0.77777778 0.88888889 1.
]
--------------------
[ 1.00000000e+00 1.00000000e+10]
--------------------
import numpy as np a=np.arange(0,60,10).reshape(-1,1)+np.arange(0,6) print(a) print('-'*30) print('a[0,3:5]为:',a[0,3:5]) print('a[4:,4:]为:',a[4:,4:]) print('a[:,2]为:',a[:,2]) print('a[2::2,::2]为:',a[2::2,::2])#开始值:结束值:步长 [[ 0 1 2 3 4 5] [10 11 12 13 14 15] [20 21 22 23 24 25] [30 31 32 33 34 35] [40 41 42 43 44 45] [50 51 52 53 54 55]] -----------------------------a[0,3:5]为: [3 4] a[4:,4:]为: [[44 45] [54 55]]
b=np.linspace(0,1,10)#指定个数的等差数列
c=np.logspace(0,10,2)#指定个数的等比数列
d=np.zeros((2,3))#零矩阵
e=np.ones((2,3))#1 矩阵
f=np.full((2,3),4,dtype='int32')# 4 矩阵
print(a)
<class 'numpy.ndarray'> number of dim: 2 shape: (2, 3) size 6 [[1 2 3] [3 4 5]] 2. 改变数组的行列数(具体数值不变) import numpy as np array=np.array([[1,2,3],
[3,4,5]]) print(array) print('-'*30) array.shape=3,2#直接改变行列数 print(array) print('-'*30) array.shape=1,-1#当设置某个轴的个数为-1 时,自动计算此轴的长度 print(array) print('-'*30) [[1 2 3] [3 4 5]] -----------------------------[[1 2] [3 3] [4 5]] -----------------------------[[1 2 3 3 4 5]] 使用 reshape()方法,创建指定形状的新数组,原数组保持不变 import numpy as np array=np.array([[1,2,3],
1. 矩阵和常见矩阵的创建 python 中,矩阵通过 numpy 中的 mat()创建一个矩阵 from numpy import * import numpy as np a=mat([[1,2,3],[4,5,6],[7,8,9]]) b=mat(zeros((3,3)))#创建一个 3*3 的零矩阵,zeros 函数的参数是一个 tuple 类型(3,3) c=mat(ones((2,4)))#创建一个 2*4 的 1 矩阵 d=mat(random.rand(2,2))#创建一个 2*2 的随机数矩阵 e=mat(random.randint(2,8,size=(2,5)))#创建一个 2*5 的,数值在 2-8 的整数 矩阵 f=mat(eye(2,2,dtype=int))#创建一个 2*2 的单位矩阵 g=mat(diag([1,2,3]))#创建一个对角线为 1,2,3 的对角矩阵 print('a:',a) print('b:',b) print('c:',c) print('e:',e) print('f:',f) print('g:',g) a: [[1 2 3] [4 5 6] [7 8 9]] b: [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]] c: [[1. 1. 1. 1.] [1. 1. 1. 1.]] e: [[3 7 5 3 5] [2 3 5 7 5]] f: [[1 0] [0 1]] g: [[1 0 0] [0 2 0] [0 0 3]]
共享内存空间(会同时修改)
import numpy as np
array=np.array([[1,2,3],
[3,4,5]])
b=array[0,0:3]#多元数组的下标存取元素,在此为取第一行的 0-2 三个元素 print('数组 b 为:',b) b[2]=99 print('更改后的数组 b 为:',b) print('array 为:' 数组 b 为: [1 2 3] 更改后的数组 b 为: [ 1 2 99] array 为: [[ 1 2 99] [ 3 4 5]] 当使用整数列表对数组元素进行存取时,将使用数组中的每个元素作为下标,使 用列表作为下标得到的数组不和原始数组共享数据: import numpy as np array=np.array([[1,2,3],
2. 矩阵乘法运算 from numpy import * a1=mat([[2,3],[3,5]]) a2=mat([[1,4],[2,5]]) b=a1*a2#矩阵相乘 c=multiply(a1,a2)#矩阵元素相乘 d=a1*2#矩阵和数字相乘
print('a1:',a1) print('a2:',a2) print('b=a1*a2:',b) print('c=multiply(a1,a2):',c) print('d=a1*2:',d) a1: [[2 3] [3 5]] a2: [[1 4] [2 5]] b=a1*a2: [[ 8 23] [13 37]] c=multiply(a1,a2): [[ 2 12] [ 6 25]] d=a1*2: [[ 4 6] [ 6 10]] 3. 矩阵的逆矩阵和矩阵的转置 from numpy import * a=mat([[1,2],[4,5]]) print('a:',a) b=a.I#求逆矩阵 print('矩阵 a 的逆矩阵为:',b) c=a.T#求转置矩阵 print('矩阵 a 的转置矩阵为:',c) a: [[1 2] [4 5]] 矩阵 a 的逆矩阵为: [[-1.66666667 0.66666667] [ 1.33333333 -0.33333333]] 矩阵 a 的转置矩阵为: [[1 4] [2 5]] 4. 计算矩阵对应行列的最大、最小值、和索引 from numpy import * import numpy as np a=mat([[1,9,2],[5,3,8],[4,7,6]]) b=a.max() print('矩阵 a 为:',a) print('矩阵 a 中的最大值为:',b) c=a[:,1].max() print('矩阵 a 中第 2 列的最大值为:',c) d=a[2,:].max() print('矩阵 a 中第 3 行的最大值为:',d) e=np.max(a,0) print('矩阵 a 所有列的最大值为:',e) f=np.max(a,1) print('矩阵 a 中所有行的最大值为:',f)
[[ 0. 0. 0.]
[ 0. 0. 0.]]
-----------------ຫໍສະໝຸດ Baidu--
[[ 1. 1. 1.]
[ 1. 1. 1.]]
--------------------
[[4 4 4]
[4 4 4]]
5. 数组存取元素
类似于列表,数组可以通过下标、切片存取元素。
和列表不同的是,通过切片获取的新的数组是原始数组的一个视图,和原始数组
• T: 32位的整数类型,相当于np.int32。 • 32 位的单精度浮点数类型,相当于 np.float32。 然后调用 array()以创建数组,通过 dtype 参数指定所创建的数组的元素类型为 persontype。
print(a.dtype)#输出数组 a 的数据类型 {'names':['name','age','weight'], 'formats':['S30','<i4','<f4'], 'itemsize':40, 'aligned':True}