NumPy 数学函数

NumPy 提供了标准的三角函数:sin()、cos()、tan(import numpy as np

 
a = np.array([0,30,45,60,90])
print ('不同角度的正弦值:')
# 通过乘 pi/180 转化为弧度
print (np.sin(a*np.pi/180))
print ('\n')
print ('数组中角度的余弦值:')
print (np.cos(a*np.pi/180))
print ('\n')
print ('数组中角度的正切值:')
print (np.tan(a*np.pi/180))
不同角度的正弦值:
[. 0.5 0.70710678 0.8660254 . ] 数组中角度的余弦值:
[1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
6.12323400e-17] 数组中角度的正切值:
[0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
1.63312394e+16]
 

numpy.around() 函数返回指定数字的四舍五入值

import numpy as np

a = np.array([1.0,5.55,  123,  0.567,  25.532])  
print ('原数组:')
print (a)
print ('\n')
print ('舍入后:')
print (np.around(a))
原数组:
[ . 5.55 . 0.567 25.532] 舍入后:
[ . . . . .]

numpy.floor() 返回数字的下舍整数

import numpy as np

a = np.array([-1.7,  1.5,  -0.2,  0.6,  10])
print ('原数组:')
print (a)
print ('\n')
print ('floor 后的数组:')
print (np.floor(a))
原数组:
[-1.7 1.5 -0.2 0.6 . ] floor 后的数组:
[-. . -. . .]

numpy.ceil() 返回数字的上入整数

import numpy as np

a = np.array([-1.7,  1.5,  -0.2,  0.6,  10])
print ('原数组:')
print (a)
print ('\n')
print ('ceil 后的数组:')
print (np.ceil(a))

  

原数组:
[-1.7 1.5 -0.2 0.6 . ] ceil 后的数组:
[-. . -. . .]

NumPy 算术函数

NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide()

add() 加法

a = np.arange(9, dtype = np.float_).reshape(3,3)
print ('第一个数组:')
print (a)
print ('\n')
print ('第二个数组:')
b = np.array([10,10,10])
print (b)
print ('\n')
print ('两个数组相加:')
print (np.add(a,b))
第一个数组:
[[0. 1. 2.]
[3. 4. 5.]
[6. 7. 8.]] 第二个数组:
[10 10 10] 两个数组相加:
[[10. 11. 12.]
[13. 14. 15.]
[16. 17. 18.]]

  

subtract()减法
a = np.arange(9, dtype = np.float_).reshape(3,3)
print ('第一个数组:')
print (a)
print ('\n')
print ('第二个数组:')
b = np.array([10,10,10])
print (b)
print ('\n')
print ('两个数组相减:')
print (np.subtract(a,b))
第一个数组:
[[. . .]
[. . .]
[. . .]] 第二个数组:
[ ]
两个数组相减:
[[-. -. -.]
[ -. -. -.]
[ -. -. -.]]

下边不再演示

numpy.reciprocal() 函数返回参数逐元素的倒数。如 1/4 倒数为 4/1。

reciprocal() 倒数
import numpy as np 

a = np.array([0.25,  1.33,  ,  ])
print ('原数组:')
print (a)
print ('\n')
print ('调用 reciprocal 函数:')
print (np.reciprocal(a))
原数组:
[ 0.25 1.33 . . ] 调用 reciprocal 函数:
[. 0.7518797 . 0.01 ]

numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂

import numpy as np 

a = np.array([,,])
print ('原组是;')
print (a)
print ('\n')
print ('调用 power 函数:')
print (np.power(a,))
print ('\n')
print ('第二个数组:')
b = np.array([,,])
print (b)
print ('\n')
print ('再次调用 power 函数:')
print (np.power(a,b))
原组是;
[ 10 100 1000] 调用 power 函数:
[ 100 10000 1000000] 第二个数组:
[1 2 3] 再次调用 power 函数:
[ 10 10000 1000000000]

  

numpy.mod() 计算输入数组中相应元素的相除后的余数。 函数 numpy.remainder() 也产生相同的结果。
求余

import numpy as np

a = np.array([10,20,30])
b = np.array([3,5,7])
print ('第一个数组:')
print (a)
print ('\n')
print ('第二个数组:')
print (b)
print ('\n')
print ('调用 mod() 函数:')
print (np.mod(a,b))
print ('\n')
print ('调用 remainder() 函数:')
print (np.remainder(a,b))

  

第一个数组:
[10 20 30] 第二个数组:
[3 5 7] 调用 mod() 函数:
[1 0 2] 调用 remainder() 函数:
[1 0 2]

  

NumPy 统计函数

numpy.amin() 和 numpy.amax()

把每个元素的最小(大)值取出,放进一个数组中

import numpy as np 

a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print ('原数组:')
print (a)
print ('\n')
print ('调用 amin() 函数:')
print (np.amin(a,1))
print ('\n')
print ('再次调用 amin() 函数:')
print (np.amin(a,0))
print ('\n')
print ('调用 amax() 函数:')
print (np.amax(a))
print ('\n')
print ('再次调用 amax() 函数:')
print (np.amax(a, axis = 0))

  

原数组:
[[3 7 5]
[8 4 3]
[2 4 9]] 调用 amin() 函数:
[3 3 2] 再次调用 amin() 函数:
[2 4 3] 调用 amax() 函数:
9 再次调用 amax() 函数:
[8 7 9]

  

numpy.median() 函数用于计算数组 a 中元素的中位数(中值)

import numpy as np 

a = np.array([[30,65,70],[80,95,10],[50,90,60]])
print ('原数组:')
print (a)
print ('\n')
print ('调用 median() 函数:')
print (np.median(a))
print ('\n')
print ('沿轴 0 调用 median() 函数:')
print (np.median(a, axis = 0))
print ('\n')
print ('沿轴 1 调用 median() 函数:')
print (np.median(a, axis = 1))
原数组:
[[ ]
[ ]
[ ]] 调用 median() 函数:
65.0 沿轴 调用 median() 函数:
[. . .] 沿轴 调用 median() 函数:
[. . .]

numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。

import numpy as np 

a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print ('原数组:')
print (a)
print ('\n')
print ('调用 mean() 函数:')
print (np.mean(a))
print ('\n')
print ('沿轴 0 调用 mean() 函数:')
print (np.mean(a, axis = 0))
print ('\n')
print ('沿轴 1 调用 mean() 函数:')
print (np.mean(a, axis = 1))
原数组:
[[ ]
[ ]
[ ]] 调用 mean() 函数:
3.6666666666666665 沿轴 调用 mean() 函数:
[2.66666667 3.66666667 4.66666667] 沿轴 调用 mean() 函数:
[. . .]

标准差和方差

import numpy as np 

print (np.std([1,2,3,4]))
print (np.var([1,2,3,4]))
1.118033988749895
1.25

  

NumPy 排序、条件筛选函数

numpy.sort() 函数返回输入数组的排序副本

import numpy as np  

a = np.array([[3,7],[9,1]])
print ('原数组:')
print (a)
print ('\n')
print ('调用 sort() 函数:')
print (np.sort(a))
print ('\n')
print ('按列排序:')
print (np.sort(a, axis = 0))
print ('\n')
# 在 sort 函数中排序字段
dt = np.dtype([('name', 'S10'),('age', int)])
a = np.array([("raju",21),("anil",25),("ravi", 17), ("amar",27)], dtype = dt)
print ('原数组:')
print (a)
print ('\n')
print ('按 name 排序:')
print (np.sort(a, order = 'name'))

  

原数组:
[[3 7]
[9 1]] 调用 sort() 函数:
[[3 7]
[1 9]] 按列排序:
[[3 1]
[9 7]] 原数组:
[(b'raju', 21) (b'anil', 25) (b'ravi', 17) (b'amar', 27)] 按 name 排序:
[(b'amar', 27) (b'anil', 25) (b'raju', 21) (b'ravi', 17)]

  

numpy.argsort() 函数返回的是数组值从小到大的索引值

import numpy as np 

x = np.array([3,  1,  2])
print ('原数组:')
print (x)
print ('\n')
print ('对 x 调用 argsort() 函数:')
y = np.argsort(x)
print (y)
print ('\n')
print ('以排序后的顺序重构原数组:')
print (x[y])
print ('\n')
print ('使用循环重构原数组:')
for i in y:
print (x[i])

  

原数组:
[3 1 2] 对 x 调用 argsort() 函数:
[1 2 0] 以排序后的顺序重构原数组:
[1 2 3] 使用循环重构原数组:
1
2
3

  

numpy.where() 函数返回输入数组中满足给定条件的元素的索引

import numpy as np 

x = np.arange(9.).reshape(3,  3)
print ('原数组:')
print (x)
print ( '大于 3 的元素的索引:')
y = np.where(x > 3)
print (y)
print ('使用这些索引来获取满足条件的元素:')
print (x[y])
原数组:
[[0. 1. 2.]
[3. 4. 5.]
[6. 7. 8.]]
大于 3 的元素的索引:
(array([1, 1, 2, 2, 2]), array([1, 2, 0, 1, 2]))
使用这些索引来获取满足条件的元素:
[4. 5. 6. 7. 8.]

  

NumPy 副本和视图

副本或深拷贝

ndarray.copy() 函数创建一个副本。 对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置

import numpy as np 

a = np.array([[10,10],  [2,3],  [4,5]])
print ('数组 a:')
print (a)
print ('创建 a 的深层副本:')
b = a.copy()
print ('数组 b:')
print (b)
# b 与 a 不共享任何内容
print ('我们能够写入 b 来写入 a 吗?')
print (b is a)
print ('修改 b 的内容:')
b[0,0] = 100
print ('修改后的数组 b:')
print (b)
print ('a 保持不变:')
print (a)

  

数组 a:
[[ ]
[ ]
[ ]]
创建 a 的深层副本:
数组 b:
[[ ]
[ ]
[ ]]
我们能够写入 b 来写入 a 吗?
False
修改 b 的内容:
修改后的数组 b:
[[ ]
[ ]
[ ]]
a 保持不变:
[[ ]
[ ]
[ ]]

浅拷贝

import numpy as np 

a = np.arange(6)
print ('原数组:')
print (a)
print ('调用 id() 函数:')
print (id(a))
print ('a 赋值给 b:')
b = a
print (b)
print ('b 拥有相同 id():')
print (id(b))
print ('修改 b 的形状:')
b.shape = 3,2
print (b)
print ('a 的形状也修改了:')
print (a)

  

原数组:
[ ]
调用 id() 函数: a 赋值给 b:
[ ]
b 拥有相同 id(): 修改 b 的形状:
[[ ]
[ ]
[ ]]
a 的形状也修改了:
[[ ]
[ ]
[ ]]

NumPy 线性代数

NumPy 提供了线性代数函数库 linalg,该库包含了线性代数所需的所有功能

numpy.dot() 对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为内积);对于二维数组,计算的是两个数组的矩矩阵乘积

import numpy.matlib
import numpy as np a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
print(np.dot(a,b))

  

[[ ]
[ ]]

numpy.vdot() 函数是两个向量的点积。 如果第一个参数是复数,那么它的共轭复数会用于计算。 如果参数是多维数组,它会被展开。

import numpy as np 

a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]]) # vdot 将数组展开计算内积
print (np.vdot(a,b))

numpy.inner() 函数返回一维数组的向量内积。对于更高的维度,它返回最后一个轴上的和的乘积

import numpy as np 

print (np.inner(np.array([1,2,3]),np.array([0,1,0])))
2

  

numpy.matmul 函数返回两个数组的矩阵乘积。

import numpy.matlib
import numpy as np

a = [[1,0],[0,1]]
b = [[4,1],[2,2]]
print (np.matmul(a,b))

[[4 1]

[2 2]]

numpy.linalg.det() 函数计算输入矩阵的行列式。

import numpy as np
a = np.array([[1,2], [3,4]])
print (np.linalg.det(a))

-2.0000000000000004

numpy.linalg.solve() 函数给出了矩阵形式的线性方程的解。

考虑以下线性方程:

$\left\{\begin{matrix}
x+y+z=6
& \\ 2y+5z=-4
& \\ 2x+5y-z=27
\end{matrix}\right.$

$\begin{bmatrix}
1&1 &1 \\
0&2 &5 \\
2& 5& -1
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
z
\end{bmatrix}
=\begin{bmatrix}
6\\
-4\\
27
\end{bmatrix}$

import numpy as np 

a = np.array([[1,1,1],[0,2,5],[2,5,-1]]) 

print ('数组 a:')
print (a) print ('矩阵 b:')
b = np.array([[6],[-4],[27]])
print (b) x = np.linalg.solve(a,b)
print ('求解')
print (x)

  

数组 a:
[[ 1 1 1]
[ 0 2 5]
[ 2 5 -1]]
矩阵 b:
[[ 6]
[-4]
[27]]
求解
[[ 5.]
[ 3.]
[-2.]]

  

持久化(将这个对象保存到硬盘上)

使用  H5PY ,PICKLE

# -*- coding: utf-8 -*-
# 斌彬电脑
# @Time : 2019-03-28 上午 9:31 import pickle
import numpy as np A = 1000 def pickle_dump():
"""
数据持久化
:return:
"""
with open('sampk.pkl', 'wb') as f:
# 生成二维的随机数
array = np.random.randn(A, A)
pickle.dump(array, f)
print('持久化{}'.format(array)) def pickle_load():
"""
反持久化
:return:
"""
with open('sampk.pkl', 'rb') as f:
array = pickle.load(f)
print('反持久化{}'.format(array)) if __name__ == '__main__':
pickle_dump()
pickle_load()

  

# -*- coding: utf-8 -*-
# 斌彬电脑
# @Time : 2019-03-28 下午 4:53 import numpy as np
import h5py
import numpy as np
import h5py
'''h5py就是以 k, v 的形式存储''' N = 1000 def pickle_serialization():
"""
持久化
:return:
"""
with h5py.File("sample.h5", "w") as hf:
array = np.random.randn(N, N)
# 可以示为生成个 group 的文件夹
group = hf.create_group("group")
# dataset 可以示为是个列表
group.create_dataset("dataset", data=array)
print("持久化: {}".format(array)) def pickle_deserialization():
"""
反持久化
:return:
"""
with h5py.File("sample.h5", "r") as hf:
for key in hf.keys():
group = hf.get(key)
for item in group.items():
print("After deserialization: {}".format(group[item[0]].value)) if __name__ == '__main__':
pickle_serialization()
pickle_deserialization()

  

阵乘积;

数据分析 大数据之路 四 numpy 2的更多相关文章

  1. 数据分析 大数据之路 三 numpy

    import numpy as np a = np.arange(9) b = a.reshape(3,3) print(b) print(b.max(axis=0)) # axis=0 示为 Y 轴 ...

  2. 数据分析 大数据之路 六 matplotlib 绘图工具

      散点图 #导入必要的模块 import numpy as np import matplotlib.pyplot as plt #产生测试数据 x = np.arange(1,10) y = x ...

  3. 数据分析 大数据之路 五 pandas 报表

    pandas:  在内存中或对象,会有一套基于对象属性的方法,   可以视为 pandas 是一个存储一维表,二维表,三维表的工具, 主要以二维表为主 一维的表, (系列(Series)) 二维的表, ...

  4. CentOS6安装各种大数据软件 第四章:Hadoop分布式集群配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  5. 胖子哥的大数据之路(四)- VisualHBase功能需求框架

    一.引言 大数据在结构化数据存储方面的应用需求越来越明确,但是大数据环境下辅助开发工具的不完善,给数据库管理人员和开发人员带来的不变难以言表,基于此创建了开源项目VisualHBase,同时创建了Vi ...

  6. 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM

    引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ...

  7. 胖子哥的大数据之路(7)- 传统企业切入核心or外围

    一.引言 昨天和一个做互联网大数据(零售行业)的朋友交流,关于大数据传统企业实施的切入点产生了争执,主要围绕两个问题进行了深入的探讨: 问题1:对于一个传统企业而言什么是核心业务,什么是外围业务? 问 ...

  8. 胖子哥的大数据之路(6)- NoSQL生态圈全景介绍

    引言: NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网.给大家分享. 正文:  The NoSQL Ecosystem 目录 The NoSQL Eco ...

  9. 大数据之路week06--day07(Hadoop生态圈的介绍)

    Hadoop 基本概念 一.Hadoop出现的前提环境 随着数据量的增大带来了以下的问题 (1)如何存储大量的数据? (2)怎么处理这些数据? (3)怎样的高效的分析这些数据? (4)在数据增长的情况 ...

随机推荐

  1. Hadoop yarn任务调度策略介绍(转)

    理想情况下,我们应用对Yarn资源的请求应该立刻得到满足,但现实情况资源往往是有限的,特别是在一个很繁忙的集群,一个应用资源的请求经常需要等待一段时间才能的到相应的资源.在Yarn中,负责给应用分配资 ...

  2. Asp.net 项目部署的两个问题

    1:关于MVC中BundleCollection压缩js css文件 发布后获取失败的问题 原因是: 默认本地vs里面调试的时候,因为web.config文件里面有一个debug属性,当有此属性时,默 ...

  3. .net core 2.0 报错:error NU1102: Unable to find package 。。。

    这种是nuget无法还原的问题.解决问题的方法: 在项目文件所在的目录下创建文件:NuGet.Config 里面内容: "?> <configuration> <pa ...

  4. elk的备份与恢复【转】

    elasticsearch提供了快照功能: 1.在elsticsearch的配置文件中定义一个path.repo路径配置 path.repo: ["/elk/my_backup"] ...

  5. 有趣的 zkw 线段树(超全详解)

    zkw segment-tree 真是太棒了(真的重口味)!写篇博客纪念入门 emmm...首先我们来介绍一下 zkw 线段树这个东西(俗称 "重口味" ,与 KMP 类似,咳咳. ...

  6. 用JDBC连接SQL Server2017数据库

    用JDBC连接SQL Server2017数据库 2018年03月26日 17:40:47 yasinzhang 阅读数:8346 安装完SQL server2017之后,选择SQL 身份验证登录,可 ...

  7. FTP设置

    ftp设置 1.登录服务器 2.程序->关闭或启用windows服务 3.创建用户 4.在iis中增加ftp站点,设置ftpsite,ip和端口号,物理路径 5.设置ftp身份验证 6.访问ft ...

  8. 注册中心(Eureka)

    1. pom.xml依赖 <dependencies> <dependency> <groupId>org.springframework.cloud</gr ...

  9. 打造vim IDE

    pathogen.vim:vim插件目录自动识别.加载(注意:能用pathogen.vim安装插件,就不要用Vundle.因为Vundle下载插件速度非常慢.) https://github.com/ ...

  10. 字符串string的相关应用

    之所以抛弃char* 的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等, 而且作为一个泛型类出现,他集成的操作函数足以完成我们大多数情况下 ...