本文参考给妹子讲python  https://zhuanlan.zhihu.com/p/34673397

NumPy是Numerical Python的简写,是高性能科学计算和数据分析的基础包,他是许多高级工具的构建基础。

他的核心功能是:

1.多维向量的描述和快速高效计算能力,让数组和矩阵的使用更加自然;
2.大量实用的数学函数,支撑复杂的线性代数、随机数生成以及傅里叶变换函数
3.具备数据的磁盘读写工具
对于同样的数值计算任务,使用NumPy要比直接编写Python代码便捷的多。
这是因为NumPy能够直接对数组和矩阵进行操作,可以省略很多循环语句,
其众多的数学函数也会让编写代码的工作轻松许多。
同时底层算法在设计时有着优异的的性能,NumPy中数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,如嵌套list。
example1:用python对象的list来创建ndarray对象
import numpy as np
data = [1,2.11,4,59]
arr = np.array(data)
print(arr)
print(type(arr)) [ 1. 2.11 4. 59. ]
<class 'numpy.ndarray'>

当然ndarray对象也可以转换成list

import numpy as np  

arr = np.arange(8)
L = arr.tolist()
print(type(L))
print(L) <class 'list'>
[0, 1, 2, 3, 4, 5, 6, 7]

example2:用嵌套列表来创建多维矩阵

import numpy as np  

data = [[1,2,3,4],[5,6,7,8.2]]
arr = np.array(data)
print(arr)
print(arr.ndim)
print(arr.shape)
print(arr.dtype)
print(type(arr)) [[ 1. 2. 3. 4. ]
[ 5. 6. 7. 8.2]]
2
(2, 4)
float64
<class 'numpy.ndarray'>
#ndim就是数组的维数, #data.ndim = len(data.shape)

example3:对已有的ndarray数组进行数据类型的显式转换

import numpy as np  

arr1 = np.array([1,2,3,4], dtype=np.float64)
arr2 = np.array([1,2,3,4], dtype=np.int32)
arr3 = arr2.astype(np.float64)
print(arr1)
print(arr2)
print(arr3) [ 1. 2. 3. 4.]
[1 2 3 4]
[ 1. 2. 3. 4.]
#我们看到arr2在创建ndarray数组时,显式指定了元素类型为int32,后续又通过astype进行数据类型的显式转换,创建了新的数组arr3,其数据类型为float64浮点型。

example4:创建全0、全1、没有具体值的矩阵

import numpy as np  

arr_0 = np.zeros(8)  #全0矩阵
arr_1 = np.ones((3, 8)) # 3行8列全1矩阵
arr_e = np.empty((2,3,2)) # 维度为2,3,2的矩阵
print(arr_0)
print(arr_1)
print(arr_e) [ 0. 0. 0. 0. 0. 0. 0. 0.] [[ 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.05931344e-316 1.87072344e-316]
[ 1.85828998e-316 1.98442969e-316]
[ 1.85755284e-316 1.70134311e-316]]
[[ 1.71304417e-316 2.37875336e-316]
[ 1.84704347e-316 1.70132375e-316]
[ 2.46176627e-316 2.34552329e-316]]]

除此之外,之前我们讲过python内置函数中有一个range函数,np中也有一个类似的函数实现该功能


import numpy as np  

arr1 = np.arange(8)
print(arr1)
print(type(arr1)) [0 1 2 3 4 5 6 7]
<class 'numpy.ndarray'> import numpy as np arr2 = np.arange(0,11,2,dtype=float)
print(arr2) [ 0. 2. 4. 6. 8. 10.]

还有一种网格数据的生成方法:即指定起始点和终止点(包含),以及网格点的个数


import numpy as np  

arr = np.linspace(0,80,5)
print(arr) [ 0. 20. 40. 60. 80.]

ndarray数据的维度转换与最简单的标量运算:


import numpy as np  

a = np.arange(24).reshape((6,4))
print(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]] # 然后将其展平,即将其转化为一个24项的一维数组
import numpy as np a = np.arange(24).reshape((6,4))
print(a.flatten()) [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23] #还有一种维度转换的使用场景,如,将之前的6×4的二维数组,转化为3×8的二维数组 import numpy as np a = np.arange(24).reshape((6,4))
a.resize((3,8))
print(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]] #转置
import numpy as np a = np.arange(24).reshape((6,4))
print(a)
print(a.transpose()) # 或者缩写成 a.T [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]] [[ 0 4 8 12 16 20]
[ 1 5 9 13 17 21]
[ 2 6 10 14 18 22]
[ 3 7 11 15 19 23]]

数组的组合


# 首先是水平的组合

import numpy as np 

a = np.arange(6).reshape((2,3))
b = a * 2
print(a)
print(b)
print(np.hstack((a,b))) [[0 1 2]
[3 4 5]] [[ 0 2 4]
[ 6 8 10]] [[ 0 1 2 0 2 4]
[ 3 4 5 6 8 10]]
# 再来看看垂直组合 import numpy as np a = np.arange(6).reshape((2,3))
b = a * 2
print(a)
print(b)
print(np.vstack((a,b))) [[0 1 2]
[3 4 5]] [[ 0 2 4]
[ 6 8 10]] [[ 0 1 2]
[ 3 4 5]
[ 0 2 4]
[ 6 8 10]]

最后我们来看看数组的标量计算

其实下面介绍的数组的标量计算功能用传统的基本数组List类型肯定是都能实现的,但是NumPy提供的最主要的便利之一就是,我们可以像操作原子数据类型一样对NumPy对象进行操作:不需要显式循环就可以对它们进行加、减、乘等运算,避免了显式循环的使用,使得代码更加清晰。同时,NumPy底层是用C语言实现的,因此代码运行的也更快。


import numpy as np  

arr = np.array([[1,2,3],[4,5,6]],dtype=np.float64)
print(arr + 1)
print(arr ** 2)
print(1/arr) [[ 2. 3. 4.]
[ 5. 6. 7.]] [[ 1. 4. 9.]
[ 16. 25. 36.]] [[ 1. 0.5 0.33333333]
[ 0.25 0.2 0.16666667]] # 另外还有数组与数组之间的运算,这里暂时只谈论维数相同的数组运算
import numpy as np arr = np.array([[1,2,3],[4,5,6]],dtype=np.float64)
print(arr+arr)
print(arr*arr) [[ 2. 4. 6.]
[ 8. 10. 12.]] [[ 1. 4. 9.]
[ 16. 25. 36.]] #对整个向量运用基本数学表达式
import numpy as np arr = np.arange(8)
print(np.sin(arr)) [ 0. 0.84147098 0.90929743 0.14112001 -0.7568025 -0.95892427 -0.2794155 0.6569866 ]



numpy模块之创建矩阵、矩阵运算的更多相关文章

  1. [转]numpy中的matrix矩阵处理

    今天看文档发现numpy并不推荐使用matrix类型.主要是因为array才是numpy的标准类型,并且基本上各种函数都有队array类型的处理,而matrix只是一部分支持而已. 这个转载还是先放着 ...

  2. numpy中的matrix矩阵处理

    numpy模块中的矩阵对象为numpy.matrix,包括矩阵数据的处理,矩阵的计算,以及基本的统计功能,转置,可逆性等等,包括对复数的处理,均在matrix对象中. class numpy.matr ...

  3. numpy模块(对矩阵的处理,ndarray对象)

    6.12自我总结 一.numpy模块 import numpy as np约定俗称要把他变成np 1.模块官方文档地址 https://docs.scipy.org/doc/numpy/referen ...

  4. numpy创建矩阵常用方法

    numpy创建矩阵常用方法 arange+reshape in: n = np.arange(0, 30, 2)# start at 0 count up by 2, stop before 30 n ...

  5. [Python]-numpy模块-机器学习Python入门《Python机器学习手册》-01-向量、矩阵和数组

    <Python机器学习手册--从数据预处理到深度学习> 这本书类似于工具书或者字典,对于python具体代码的调用和使用场景写的很清楚,感觉虽然是工具书,但是对照着做一遍应该可以对机器学习 ...

  6. 3 numpy模块

    Numpy     什么是Numpy:Numeric Python         Numpy模块是Python的一种开源的数值计算扩展.             1 一个强大的N维数组对象Array ...

  7. 开发技术--Numpy模块

    开发|Numpy模块 Numpy模块是数据分析基础包,所以还是很重要的,耐心去体会Numpy这个工具可以做什么,我将从源码与 地产呢个实现方式说起,祝大家阅读愉快! Numpy模块提供了两个重要对象: ...

  8. numpy模块的基本使用

    numpy(Numerical Python)提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速.节省空间.numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提 ...

  9. numpy模块、matplotlib模块、pandas模块

    目录 1. numpy模块 2. matplotlib模块 3. pandas模块 1. numpy模块 numpy模块的作用 用来做数据分析,对numpy数组(既有行又有列)--矩阵进行科学计算 实 ...

随机推荐

  1. 寒城攻略:Listo 教你用Swift 语言编写 IOS 平台流媒体播放器

    先展示播放器效果:   依然继承 Listo 本人的强迫症,还是从最初到完毕完整的写一个攻略来记录一下,这里声明 Listo 本人也是看了非常多的戴维营攻略才总结分享给大家这一篇攻略的. 首先,Lis ...

  2. 【ask】webstorm调试node单个js文件

    The procedure falls into two parts: first we start an application as usual and then connect to it wi ...

  3. OpenCV学习笔记四:ImgProc模块

    一,简介 这个模块包含一系列的常用图像处理算法. 二,分析 此模块包含的文件如下图: 其导出算法包括如下: /*********************** Background statistics ...

  4. httpclient 怎么带上登录成功后返回的cookie值访问下一页面

    我是只很菜很菜的小鸟.刚上班,有这个一个需求.要我抓取别的网站的数据.     我根据用户密码登录一个网站成功后,生成一个cookie值.我已经获取到了.然后要带上这个cookie值进行下一页面的访问 ...

  5. 使用 fastjson将字符串转为 list<map<string,object>>

    //先将字符串转为list 集合 json字符串linkConfJson List<Map> linkConf= JSONArray.parseArray(linkConfJson,Map ...

  6. 【BZOJ4724】[POI2017]Podzielno 数学+二分

    [BZOJ4724][POI2017]Podzielno Description B进制数,每个数字i(i=0,1,...,B-1)有a[i]个.你要用这些数字组成一个最大的B进制数X(不能有前导零, ...

  7. AGS Server10.1中地图文档更新如何使服务更新

    一.需求背景 发布服务的mxd文档发生了更改,如何对该mxd文档映射的地图服务进行更新. 二.分析 由于在10.1中地图服务的发布采用的是msd的形式,也就是虽然在ArcMap中准备的地图文档是mxd ...

  8. 如何枚举 Windows 顶级桌面窗口?

    bool is_top_level_window(HWND hwnd) { if (!IsWindow(hwnd)) return false; DWORD dw_style = GetWindowL ...

  9. Vue.js中css的作用域

    Vue.js中的css的作用域问题: 如果在vue组件下的style中定义样式,效果会作用于整个html页面,如果只想本组件的css样式只作用于本组件的话,在<style>标签里添加sco ...

  10. recyclerView布局

    http://blog.csdn.net/lmj623565791/article/details/45059587