【整理】Python学习笔记1.5

第五章 NumPy数值计算


     NumPy是最著名的Python库之一。NumPy提供了两种基本的对象:ndarrayufunc(终于开始了快乐的Python库学习之旅)

内容太多,故只摘记一些点在这里,但学懂了第四章,去应用方法就好


NumPy官网

关于ndarray

创建与索引

NumPy提供了多种创建ndarray的方式,其中array函数可以创建一维或多维ndarray,其基本语法格式如下:

numpy.array(object, dtype = None, copy = True, order = ‘k’, subok = False, ndmin = 0)
参数说明
object接收array、list、tuple等,表示用于创建ndarray的数据,无默认值。
dtype接收data-type,表示创建的ndarray的数据类型。如果未给定,那么选择保存对象所需的最小字节数的字节类型。无默认值。
ndmin接收Int,指定生成ndarray应该具有的最小维数。默认为0。

特殊的创建函数

特殊的创建函数说明
arange创建等差数列(指定开始值、终值和步长)
linspace创建等差数列(指定开始值、终值和元素个数)
logspace创建等比数列
zeros创建值全为0的矩阵
eye创建单位矩阵(对角线元素为1,其余为0)
diag创建对焦矩阵(对角线元素为指定值,其余为0)
ones创建值全部为1的矩阵

也可采用相应函数如reshape、ravel等,实现对ndarry数组的索引,形状变换,组合和分割等。(具体内容可使用时自行查阅,略)

关于ufunc

ufunc,全称通用函数(universal function),是一种能够对ndarray中所有元素进行操作的函数。因此,ndarray能够运用向量化运算来处理整个数组,而完成同样的任务,Python的列表则通常需要借助循环语句遍历列表,并对逐个元素进行相应的处理。

常用的ufunc运算有算术运算、三角函数、集合函数、比较运算、逻辑运算和统计计算等。

在实际的数据分析人物中,更多使用文本格式的数据,如txt或csv,因此经常使用loadtxt函数执行对文本格式的数据的读取任务。savetxt函数是将ndarray写到由某种分隔符隔开的文本文件中。

numpy.linalg模块提供的常用的线性运算功能。

第五章课后题概述

课后题概述

  1. BC
    NumPy提供了两种基本的对象:ndarray和ufunc。其中,ndarray(N-dimensional Array Object)是一个具有矢量算术运算和复杂广播能力的、快速且节省空间的多维数组。ufunc(Universal Function Object)则提供了对ndarray进行快速运算和复杂广播能力

  2. D
    常用的ndarray属性主要有维数、尺寸、元素总数、数据类型、每个元素的存储字节数等,分别用ndim、shape、size、dtype和itemsize来表示。

  3. C
    np.arange(0,9).reshape(3,3)的结果为
    [[0 1 2]
    [3 4 5]
    [6 7 8]]
    np.eye(3)的结果为
    [[1 0 0]
    [0 1 0]
    [0 0 1]]
    np.random.random([3,3,3])应改为np.random.random([3,3]),才会产生一个3×3的随机数值矩阵
    np.mat(“1 2 3; 4 5 6; 7 8 9”)的结果为
    [[ 1 2 3]
    [4 5 6]
    [7 8 9]
    具体展示如下:
    运行展示

  4. D
    逐项解释一下。NumPy中常用排序函数有sort、argsort和lexsort,其中sort属直接排序,argsort和lexsort属于间接排序。故ABC均属于排序函数,只有D是提取函数。

  5. C
    借助ufunc,ndarry能够运用向量化运算来处理整个数组,而完成同样的任务,Python的列表则通常需要借助循环语句遍历列表,并对逐个元素进行相应的处理。因此效率更高。

  6. ABCD
    ufunc广播的4个原则是:
    1) 让所有输入ndarray都向其中shape最长的ndarray看齐,shape中不足的部分都通过在前面加1补齐。
    2) 输出ndarray的shape是输入ndarray shape的各个轴上的最大值。
    3) 输入ndarray的某个轴和输出ndarray的对应轴的长度相同或其长度为1时,这个ndarray能够用于计算,否则出错。
    4) 当输入ndarray的某个轴的长度为1,且沿着此轴运算时,都用此轴上的第一组值。

  7. 填空题
    (1)reshape函数在改变ndarray的形状的同时不改变原始数据的值。
    (2)在NumPy中直接排序经常使用sort函数,间接排序经常使用argsort函数和lexsort函数。
    *直接排序指对数值直接进行排序;间接排序指根据一个或多个键值对数据集进行排序。
    (3)广播(Broadcasting)是指不同形状的ndarray之间执行算术运算的方式。
    *当进行ndarray计算时,ufunc会对两个数据的每个对应元素进行计算,执行这种计算方式的前提是两个ndarray的shape大小一致。若两个ndarray的shape不一致,Numpy则会实行广播机制。
    (4)argsort函数可以返回集合中的唯一元素并排序

  8. 生成范围在0~1之间,服从均匀分布的10行5列的ndarray。

import numpy as np
print('rand函数生成的服从均匀分布的随机数ndarray为:\n', np.random.rand(10, 5))
rand函数生成的服从均匀分布的随机数ndarray为:
 [[0.53470725 0.83219815 0.82950181 0.29835395 0.87077822]
 [0.72346779 0.98923055 0.39596073 0.66288948 0.9117126 ]
 [0.59255231 0.40580931 0.93153048 0.07059021 0.02105296]
 [0.59124075 0.16790755 0.78345497 0.14842275 0.09439926]
 [0.26743091 0.99961359 0.32414099 0.31877465 0.90340814]
 [0.15710332 0.0123013  0.9728615  0.85520103 0.79700842]
 [0.30682381 0.69617665 0.77889846 0.61151817 0.96931321]
 [0.94790973 0.289788   0.89968492 0.33548125 0.57415498]
 [0.47943747 0.5394681  0.70409507 0.69844242 0.07203066]
 [0.01936026 0.02759766 0.23318908 0.89592223 0.20423337]]
  1. 计算2×2矩阵的乘积。
import numpy as np
arr1= np.matrix([[1,2],[12,12]])
arr2= np.matrix([[84,67],[678,56]])
print('矩阵乘积的结果为:\n',arr1*arr2)
矩阵乘积的结果为:
 [[1440  179]
 [9144 1476]]
  1. 求矩阵的特征值和特征向量
import numpy as np
A= np.matrix([[3,-1],[-1,3]])
eigenvalue,featurevector = np.linalg.eig(A)
print('特征值为:',eigenvalue,'\n特征向量为:\n',featurevector)
特征值为: [4. 2.] 
特征向量为:
 [[ 0.70710678  0.70710678]
 [-0.70710678  0.70710678]]
  1. 对矩阵进行奇异分解
import numpy as np
A= np.matrix([[4,11,14],[8,7,-2]])
U, D,Vt=np.linalg.svd(A)
print('U:\n',U,'\nD为:\n',D,'\nVt为:\n',Vt)
U:
 [[-0.9486833  -0.31622777]
 [-0.31622777  0.9486833 ]] 
D为:
 [18.97366596  9.48683298] 
Vt为:
 [[-0.33333333 -0.66666667 -0.66666667]
 [ 0.66666667  0.33333333 -0.66666667]
 [-0.66666667  0.66666667 -0.33333333]]
  1. 行列式计算
import numpy as np
D=np.array([[4,6,8],[4,6,9],[5,6,8]])
print('D计算结果为:',np.linalg.det(D),"\nD'计算结果为:",np.linalg.det(D.T))
D计算结果为: 5.999999999999996 
D'计算结果为: 6.0

     注:代码除部分经本人修改外,主要来自 机械工业出版社的《Python3智能数据分析快速入门》 的配套资料。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值