使用python参加数学建模(Week1:基础库的学习之numpy)

在学长的邀请下,我(大一小菜鸡)将参加今年9月份的数学建模大赛

所以在这个几个月中我会时常更新,分享学习过程中的经验与建议。

希望可以帮助大家

目录

一.创建数组以及其数组类型

二.数组的索引和元算复制

三.numpy的矩阵


一.创建数组以及其数组类型

(1)numpy没有使用python本身的数组机制,而是提供了ndarray数组对象。该对象不但可以方便的存取数据,还提供了丰富的数组计算函数。

使用numpy的ndarrary就要导入Numpy的函数包

import numpy #直接导入函数包
import numpy as np #导入numpy函数包并指定导入包的别名

创建数组array函数以及其参数

import numpy
import numpy as np
#数据类型是整形的一维数组
a = np.array([1,2,3])
print('显示numpy里的一维数组a',a)
#数据类型是复数的一维数组
b = np.array([1,2,3],dtype=complex)
print('显示numpy里数据类型是复数的一维数组b',b)
#数据类型是浮点型的二维数组
c = np.array([[1.00,2.00],[3.01,4.02]],dtype=float)
print('显示numpy里数据类型数浮点型的二维数组c',c)
#维度为2的一维数组
d = np.array([1,2,3],ndmin = 2)
print('显示numpy里被ndmin强制要求生成最小维度是2的数组d',d)

 运行结果

显示numpy里的一维数组a [1 2 3]
显示numpy里数据类型是复数的一维数组b [1.+0.j 2.+0.j 3.+0.j]
显示numpy里数据类型数浮点型的二维数组c [[1.   2.  ]
 [3.01 4.02]]
显示numpy里被ndmin强制要求生成最小维度是2的数组d [[1 2 3]]

(2)特殊数组:ones zeros empty

    zeros 数组是全为零的数组,即数组元素全为零

    ones 数组是全为一的数组 ,即数组元素全为一

    empty 数组是空数组 ,即数组中所有元素全进视为零

   序列数组:arange linspace

     arange:与python中range差不多 参数是 开始值-结束值-步长

    linspace: 等差数列 参数是:开始值-结束值-元素个数

import numpy
import numpy as np

#特殊数组
#含有6个零的数组,类型默认为浮点型
print('打印特殊数组')
a = np.zeros(6)
print('含有6个零的数组(浮点型)a是:',a)
#含有6个零的数组,类型是整形
a1 = np.zeros(6,dtype=int)
print('含有6个零的数组(整形):',a1)
#含有6个一的数组,类型默认是浮点型
b = np.ones(6)
print('含有6个一的数组(浮点型)',b)
#建立多于一维的数组 类型为整形
c = np.ones((4,4))
print('四维的一数组',c)
x = np.empty((2,4))
print(x)
print()

#序列数组
print('打印序列数组')
arr = np.arange(1,121,4)
print('用arange打印的序列数组',arr)
arrc = np.linspace(0,8,4)
print('用linspace打印的序列数组',arrc)

 运行结果:

打印特殊数组
含有6个零的数组(浮点型)a是: [0. 0. 0. 0. 0. 0.]
含有6个零的数组(整形): [0 0 0 0 0 0]
含有6个一的数组(浮点型) [1. 1. 1. 1. 1. 1.]
四维的一数组 [[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
[[0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000]
 [0.00000000e+000 2.66795449e-321 2.35569143e+251 8.65031357e+183]]

打印序列数组
用arange打印的序列数组 [  1   5   9  13  17  21  25  29  33  37  41  45  49  53  57  61  65  69
  73  77  81  85  89  93  97 101 105 109 113 117]
用linspace打印的序列数组 [0.         2.66666667 5.33333333 8.        ]

二.数组的索引和元算复制

(1)数组索引

numpy数组每一个元素都是可以访问的,和一般情况一样,索引是从零开始的。

比如在下面这个三维数组中

1 2 3 4 
5 6 7 8
9 10 11 12

例如要访问‘2’可以使用

print('输出numpy1数组元素2')
print(numpy1[0][1])#按照第一行第二列
print(numpy1[:,1][0])#按照第二列第一行

具体示例

import numpy as np
import numpy
num1 = np.array([[8,6,5.2],[3.5,-8,0.59]])
print('显示nun1的所有元素',num1)
print()
print('显示num1中第一行的元素',num1[0])
print('显示num1第一行中的第二个元素',num1[0][1])
print('显示num1中第二行得第三个元素',num1[1][2])
print()
print('显示num1数组中第三列元素',num1[:,2])
print('显示num1数组中第二列元素',num1[:,1])
print('显示num1数组中第一列的第一行个的元素',num1[:,0][0])

运行结果

显示nun1的所有元素 [[ 8.    6.    5.2 ]
 [ 3.5  -8.    0.59]]

显示num1中第一行的元素 [8.  6.  5.2]
显示num1第一行中的第二个元素 6.0
显示num1中第二行得第三个元素 0.59

显示num1数组中第三列元素 [5.2  0.59]
显示num1数组中第二列元素 [ 6. -8.]
显示num1数组中第一列的第一行个的元素 8.0

(2)数组运算

包含元素的加,减,乘,除,乘方,最大值,最小值

import numpy
import numpy as np
num1 = np.array([8,6,5.2])
num2 = np.array([3.5,-8,0.59])
print('数组的加法运算',num1+num2)
print('数组的减法运算',num1-num2)
print('数组的乘法运算',num1*num2)
print('数组的除法运算',num1/num2)
print()
print('数组num1的乘方运算',num1**2)
print('数组num1和num2的比较',num1>=num2)
print('num1的最大值',num1.max())
print('num2的最小值',num2.max())
print('数组num1的和',num1.sum())
print()
print('数组的点乘运算',np.dot(num1,num2))#把乘法的到的数加起来

运行结果

数组的加法运算 [11.5  -2.    5.79]
数组的减法运算 [ 4.5  14.    4.61]
数组的乘法运算 [ 28.    -48.      3.068]
数组的除法运算 [ 2.28571429 -0.75        8.81355932]

数组num1的乘方运算 [64.   36.   27.04]
数组num1和num2的比较 [ True  True  True]
num1的最大值 8.0
num2的最小值 3.5
数组num1的和 19.2

数组的点乘运算 -16.932
[[ 1  4  9]
 [16 25 36]]

(2)数组的复制

numpy数组的复制分为两种

一种数浅复制:通过数组变量的复制完成,只复制数组的引用,这样对浅复制的数组中的元素进行修改时,原数组的值也会进行相应的改变

另外一种是深复制,通过数组对象的copy完成,对复制过来的数组中的元素进行修改时,原数组的值不会改变

import numpy as np
import numpy
num1 = np.array([1,2,3,4])
num2 = num1
print('浅复制的数组num2',num2)
print('对浅复制数组num2进行修改')
num2[0] = 5
print('修改后的num2',num2)
print('修改num2后的原数组',num1)
print()

print('创建深复制的原数组')
num3 = np.ones(4,dtype=int)
num4 = num3.copy()
print('深复制的数组num4',num4)
print('对深复制数组num4进行修改')
num4[0] = 2
print('修改后的num4',num4)
print('num4被修改后的原数组',num3)

运行结果

浅复制的数组num2 [1 2 3 4]
对浅复制数组num2进行修改
修改后的num2 [5 2 3 4]
修改num2后的原数组 [5 2 3 4]

创建深复制的原数组
深复制的数组num4 [1 1 1 1]
对深复制数组num4进行修改
修改后的num4 [2 1 1 1]
num4被修改后的原数组 [1 1 1 1]

三.numpy的矩阵

矩阵是一个按照长方形矩阵排列的复数或者实数的集合

numpy的矩阵对象和数组对象差不多,不同之处在于矩阵对象的计算。

使用matrick函数创建

import numpy as np
import numpy
num1 = np.matrix([[2,4,8],[14,16,20]])
print('矩阵数据类容')
print(num1)
num2 = num1.T
print('转置后的矩阵')
print(num2)
print('矩阵的乘法')
print(num1*num2)
num3 = num1.I
print('矩阵的逆')
print(num3)

运行结果

矩阵数据类容
[[ 2  4  8]
 [14 16 20]]
转置后的矩阵
[[ 2 14]
 [ 4 16]
 [ 8 20]]
矩阵的乘法
[[ 84 252]
 [252 852]]
矩阵的逆
[[-0.22619048  0.08333333]
 [-0.07738095  0.04166667]
 [ 0.2202381  -0.04166667]]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值