一、NumPy

1、简介:

 官网链接:http://www.numpy.org/

 NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库

2、基本功能:

  • 快速高效的多维数组对象ndarray
  • 用于对数组执行元素级计算以及直接对数组执行数学运算的函数
  • 用于读写硬盘上基于数组的数据集的工具
  • 线性代数运算、傅里叶变换,以及随机数生成
  • 用于将C、C++、Fortran代码集成到Python的工具
  • 除了为Python提供快速的数组处理能力,NumPy在数据分析方面还有另外一
  • 个主要作用,即作为在算法之间传递数据的容器。

3、NumPy的ndarray 创建ndarray

* 数组创建函数

 

demo:

import numpy

print('使用普通一维数组生成NumPy一维数组')
data = [6, 7.5, 8, 0, 1]
arr = numpy.array(data)
print(arr)
print(arr.dtype) print('使用普通二维数组生成NumPy二维数组')
data = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr = numpy.array(data)
print(arr)
print('打印数组维度')
print(arr.shape) print('使用zeros/empty')
print(numpy.zeros(10)) # 生成包含10个0的一维数组
print(numpy.zeros((3, 6))) # 生成3*6的二维数组
print(numpy.empty((2, 3, 2))) # 生成2*3*2的三维数组,所有元素未初始化。
print print('使用arrange生成连续元素')
print(numpy.arange(15)) # [0, 1, 2, ..., 14]

输出:

使用普通一维数组生成NumPy一维数组
[6. 7.5 8. 0. 1. ]
float64
使用普通二维数组生成NumPy二维数组
[[1 2 3 4]
[5 6 7 8]]
打印数组维度
(2, 4)
使用zeros/empty
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]]
[[[8.82769181e+025 7.36662981e+228]
[7.54894003e+252 2.95479883e+137]
[1.42800637e+248 2.64686750e+180]] [[1.09936856e+248 6.99481925e+228]
[7.54894003e+252 7.67109635e+170]
[2.64686750e+180 5.63234836e-322]]]
使用arrange生成连续元素
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]

4、NumPy的ndarray NumPy数据类型

 

 

demo:

import numpy as np

print('生成数组时指定数据类型')
arr = np.array([1, 2, 3], dtype = np.float64) # 生成ndarray数组,数据类型:float64
print(arr.dtype)
arr = np.array([1, 2, 3], dtype = np.int32)
print(arr.dtype) print ('使用astype复制数组并转换数据类型')
int_arr = np.array([1, 2, 3, 4, 5])
float_arr = int_arr.astype(np.float)
print (int_arr.dtype)
print (float_arr.dtype) print ('使用astype将float转换为int时小数部分被舍弃')
float_arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])
int_arr = float_arr.astype(dtype = np.int)
print (int_arr) print ('使用astype把字符串转换为数组,如果失败抛出异常。')
str_arr = np.array(['1.25', '-9.6', ''], dtype = np.string_)
float_arr = str_arr.astype(dtype = np.float)
print (float_arr) print ('astype使用其它数组的数据类型作为参数')
int_arr = np.arange(10)
float_arr = np.array([.23, 0.270, .357, 0.44, 0.5], dtype = np.float64)
print (int_arr.astype(float_arr.dtype))
print (int_arr[0], int_arr[1] ) # astype做了复制,数组本身不变。

输出:

生成数组时指定数据类型
float64
int32
使用astype复制数组并转换数据类型
int32
float64
使用astype将float转换为int时小数部分被舍弃
[ 3 -1 -2 0 12 10]
使用astype把字符串转换为数组,如果失败抛出异常。
[ 1.25 -9.6 42. ]
astype使用其它数组的数据类型作为参数
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
0 1

* numpy dtype类型字符码

# 类型字符码  ,用简写表示
np.bool_: ?
np.int8: b
np.uint8: B
np.int8/16/32/64: i1/2/4/8
np.uint8/16/32/64: u1/2/4/8
np.float/16/32/64: f2/4/8
np.complex64/128: c8/16
np.str_: U<字符数>
np.datetime64: M8
字节序前缀,用于多字节整数和字符串:
</>/[=]分别表示小端/大端/硬件字节序。 demo: <字节序前缀><维度><类型><字节数或字符数>
>3i4:大端字节序,3个元素的一维数组,每个元素都是整型,每个整型元素占4个字节,即int32。
<(2,3)u8:小端字节序,6个元素2行3列的二维数组,每个元素都是无符号整型,每个无符号整型元素占8个字节,uint64。
>U7: 包含7个字符的Unicode字符串,每个字符占4个字节,采用大端字节序。

* numpy 组合与拆分

组合与拆分
垂直:
np.vstack((上, 下))->组合数组
np.concatenate((上, 下), axis=0)
/ 二维:0-行,垂直,1-列,水平
axis表示轴向 <
\ 三维:0-页,深度,1-行,垂直,2-列,水平
np.vsplit(数组, 份数)->上, ..., 下
np.split(数组, 份数, axis=0)
水平
np.hstack((左, 右))->组合数组
np.concatenate((左, 右), axis=1)
np.hsplit(数组, 份数)->左, ..., 右
np.split(数组, 份数, axis=1)
深度
np.dstack((前, 后))->组合数组
np.dsplit(数组, 份数)->前, ..., 后
行列(可以用一维数组做参数)
np.row_stack((上, 下))->组合数组
np.column_stack((左, 右))->组合数组
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
a = np.arange(11, 20).reshape(3, 3)
print(a)
/*
[[11 12 13]
[14 15 16]
[17 18 19]]
*/
b = a + 10
print(b)
/*
[[21 22 23]
[24 25 26]
[27 28 29]]
*/
c = np.vstack((a, b))
print(c)
/*
[[11 12 13]
[14 15 16]
[17 18 19]
[21 22 23]
[24 25 26]
[27 28 29]]
*/
d = np.concatenate((a, b), axis=0)
print(d)
/*
[[11 12 13]
[14 15 16]
[17 18 19]
[21 22 23]
[24 25 26]
[27 28 29]]
*/
e, f = np.vsplit(c, 2)
print(e, f, sep='\n')
/*
e:
[[11 12 13]
[14 15 16]
[17 18 19]] f:
[[21 22 23]
[24 25 26]
[27 28 29]]
*/
g, h = np.split(d, 2, axis=0)
print(g, h, sep='\n')
/*
g:
[[11 12 13]
[14 15 16]
[17 18 19]] h:
[[21 22 23]
[24 25 26]
[27 28 29]]
*/
i = np.hstack((a, b))
print(i)
/*
[[11 12 13 21 22 23]
[14 15 16 24 25 26]
[17 18 19 27 28 29]]
*/
j = np.concatenate((a, b), axis=1)
print(j)
/*
[[11 12 13 21 22 23]
[14 15 16 24 25 26]
[17 18 19 27 28 29]]
*/
k, l = np.hsplit(i, 2)
print(k, l, sep='\n')
/*
k:
[[11 12 13]
[14 15 16]
[17 18 19]] l:
[[21 22 23]
[24 25 26]
[27 28 29]]
*/
m, n = np.split(i, 2, axis=1)
print(m, n, sep='\n')
/*
m:
[[11 12 13]
[14 15 16]
[17 18 19]] n:
[[21 22 23]
[24 25 26]
[27 28 29]]
*/
o = np.dstack((a, b))
print(o)
/*
[[[11 21]
[12 22]
[13 23]] [[14 24]
[15 25]
[16 26]] [[17 27]
[18 28]
[19 29]]]
*/
p, q = np.dsplit(o, 2)
print(p.T[0].T, q.T[0].T, sep='\n')
/*
p.T[0].T:
[[11 12 13]
[14 15 16]
[17 18 19]] q.T[0].T:
[[21 22 23]
[24 25 26]
[27 28 29]]
*/
a, b = a.ravel(), b.ravel()
print(a, b)
/*
a:
[11 12 13 14 15 16 17 18 19]
b:
[21 22 23 24 25 26 27 28 29]
*/
// r = np.vstack((a, b))
r = np.row_stack((a, b))
print(r)
/*
[[11 12 13 14 15 16 17 18 19]
[21 22 23 24 25 26 27 28 29]]
*/
// s = np.hstack((a, b))
s = np.column_stack((a, b))
print(s)
/*
[[11 21]
[12 22]
[13 23]
[14 24]
[15 25]
[16 26]
[17 27]
[18 28]
[19 29]]
*/

demo:

* ndarray类的属性

shape: 维度
dtype: 元素类型
size: 元素总数量
ndim: 维数,len(shape)
itemsize: 元素的字节数 = 元素类型 / 8
nbytes: 总字节数 = size * itemsize
real: 复数数组的实部数组
imag: 复数数组的虚部数组
T: 数组对象的转置视图
flat: 扁平迭代器 # 可用于python 数据遍历
数组对象.tolist()->列表 # 将数组转为列表 , a.tolist() ,a 为array类型

demo: 

import numpy as np
a = np.array([[1 + 1j, 2 + 4j, 3 + 7j],
[4 + 2j, 5 + 5j, 6 + 8j],
[7 + 3j, 8 + 6j, 9 + 9j]])
print(a.shape) # (3, 3)
print(a.dtype) # complex128 复数128类型
print(a.size) # 9 个元素
print(a.ndim) # 2 个维度、二维
print(a.itemsize) # 16, 一个元素16个字节(complex128 / 8位 = 16字节)
print(a.nbytes) # 144, 总字节数144(总元素个数size * 单个元素字节itemsize)
print(a.real, a.imag, sep='\n') # 自行测试
print(a.T)
print([elem for elem in a.flat]) # 扁平迭代器 遍历
b = a.tolist() # 转换成 list 类型
print(b)

5、NumPy的ndarray 数组和标量之间的运算

  • 不用编写循环即可对数据执行批量运算
  • 大小相等的数组之间的任何算术运算都会将运算应用到元素级
  • 数组与标量的算术运算也会将那个标量值传播到各个元素

demo:

import numpy as np

# 数组乘法/减法,对应元素相乘/相减。
arr = np.array([[1.0, 2.0, 3.0], [4., 5., 6.]])
print (arr * arr) # 不需要做循环,相当于对应元素进行平方处理
print (arr - arr) # 标量操作作用在数组的每个元素上
arr = np.array([[1.0, 2.0, 3.0], [4., 5., 6.]])
print (1 / arr)
print (arr ** 0.5) # 开根号

输出:

[[ 1.  4.  9.]
[16. 25. 36.]] [[0. 0. 0.]
[0. 0. 0.]] [[1. 0.5 0.33333333]
[0.25 0.2 0.16666667]] [[1. 1.41421356 1.73205081]
[2. 2.23606798 2.44948974]]


python数据分析与展示

一、Ipython使用

1、符号:?

 在变量前面或后面加上‘?’可以获取相关的描述信息

2、%魔法命令

%run 系统文件   # 执行某一个文件

# ipython的模式命令  :

%magic # 显示所有的魔术命令

%hist    # 命令历史输入信息

%pdb    # 异常发生后自动进入调试器

%reset  # 删除当前命名空间中的全部变量或名称

%who   # 显示Ipython 当前命名空间中的已经定义的变量

%time statemnent # 给出代码执行时间

%timeit statement # 多次实行代码,计算平均执行时间

二、numpy

1、numpy入门

  import numpy as np

 

 

 

 

 

 

 


2、ndarray的创建

常用方法一:

 

demo:

 

常用方法二:

 

demo:

   


 

 

demo:

 

 


3、ndarray数组的维度变化

 

demo:

 a是3维数组,元素个数24个,使用reshape()、resize(),不改变数组元素,但可以改变shape形状

 使用.flatten(),将多维数组降为一维数组,原数组是不变的


** .astype:可以变换数组的类型,比如将int类型转为float类型:

** tolist:将ndarray数组转换成列表:


4、ndarray数组的操作

1)一维数组:

2)多维数组

 索引:

 

 切片:

  a[1,2,3] :1→第一维度 ,2→第二维度 ,3→第三维度

  如下图a数组,第一维度为2,第二维度为3,第三维度为4 。

  a[:,1:3,:] :表示第一维度、第三维度选择全部,不管 ; 第二维度只选择1:3,第二维度为2,在1中的1:3 → [4,5,6,7],[8,9,10,11] ;在2中的1:3 → [16,17,18,19],[20,21,22,23] ,因此结果为:

   [[[4,5,6,7],[8,9,10,11]],[[16,17,18,19],[20,21,22,23]],]

, 


5、ndarray数组的运算

1)一元函数:对一个数组进行的运算

demo:

2)二元函数:两个数组之间的运算

demo:


6、numpy数据的存取与函数

1)CSV文件存取

 ①、np.savetxt 函数:保存ndarray数组到CSV文件中

 

 demo:

 

 输出:

 


 ②、np.loadtxt 函数:将CSV文件中的数据读取出来

 

demo:

 

注意:CSV文件的局限性

 


③、多维数组的存取

 a.tofile 函数:a是ndarray数组,将a数组存入文件中

 

demo:

 

输出:

 


如果不指定sep参数,那么写入文件是以二进制的方式写入的,如下:

 

  np.fromfile 函数:从指定文件中读取数据

 

demo:

 



2)、numpy的便捷文件存取函数:.npy文件

 在①-③中的文件存取方式,生成的文件内容都是以文本的方式进行存储,获取时只是读出文本形式,需要我们通过reshape等方法将数据还原成数组类型。而现在讲的这种文件存取函数,是可以将存储进去的数据,获取时直接按原数组类型取出

这两个函数存取的文件扩展名默认为.npy,如果不习惯这种文件存取,建议使用上面的文件存取方式

demo:

 


3)numpy的随机函数:random子库

demo:

 

 


 

demo:

 

 


demo:

 


7、numpy的统计函数

demo:

 


demo:

 


8、numpy的梯度函数

demo:

 

 


小结:

 


实例

图片:

通过numpy的ndarray数组打开,发现图片其实也是一个三维数组组成:宽、高、像素:

from PIL import Image
import numpy as np
im = np.array(Image.open(r'C:\Users\Administrator\Desktop\666.jpg'))
print(im.shape,im.dtype) # 打印结果:
# runfile('C:/Users/Administrator/.spyder-py3/temp.py', wdir='C:/Users/Administrator/.spyder-py3')
(200, 200, 3) uint8 # 宽、高、像素值(RGB)

图像的变换:

# 图像的变换
# -*- coding: utf-8 -*-
from PIL import Image
import numpy as np
a = np.array(Image.open(r'C:\Users\Administrator\Desktop\666.jpg')) # 打开图片,并存为ndarray数组类型
# print(im)
#print(im.shape,im.dtype)
b = [255,255,255]-a # 将该数组每个像素取补数
im = Image.fromarray(b.astype('uint8')) # 复制b数组的形状,并将元素数据类型转换成uint8类型
im.save(r'C:\Users\Administrator\Desktop\777.jpg')

结果:

  


数据可视化--> numpy的更多相关文章

  1. 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题

    动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...

  2. [译]学习IPython进行交互式计算和数据可视化(五)

    第四章:交互式绘图接口 本章我们将展示Python的绘图功能以及如何在IPython中交互式地使用它们. NumPy为处理大量的多维数组结构的数据提供了高效的方法.但是看行行列列的数字总不如直接看曲线 ...

  3. [译]学习IPython进行交互式计算和数据可视化(四)

    第三章 使用Python进行数字计算 尽管IPython强大的shell和扩展后的控制台能被任何Python程序员使用,但是这个工具最初是科学奖为科学家设计的.它的主要设计目标就是为使用Python进 ...

  4. [译]学习IPython进行交互式计算和数据可视化(三)

    第二章 在本章中,我们将详细学习IPython相对以Python控制台带来的多种改进.特别的,我们将会进行下面的几个任务: 从IPython中使用系统shell以在shell和Python之间进行强大 ...

  5. [译]学习IPython进行交互式计算和数据可视化(一)

    --学习IPython进行交互式Python编程.高性能数字计算和数据可视化 作者:Cyrille Rossant 译者:Tacey Wong 注:仅为个人翻译及学习,多有谬处,E文尚可的推荐阅读英文 ...

  6. Caffe学习系列(13):数据可视化环境(python接口)配置

    caffe程序是由c++语言写的,本身是不带数据可视化功能的.只能借助其它的库或接口,如opencv, python或matlab.大部分人使用python接口来进行可视化,因为python出了个比较 ...

  7. matplotlib实现数据可视化

    一篇matplotlib库的学习博文.matplotlib对于数据可视化非常重要,它完全封装了MatLab的所有API,在python的环境下和Python的语法一起使用更是相得益彰. 一.库的安装和 ...

  8. Python数据可视化——使用Matplotlib创建散点图

    Python数据可视化——使用Matplotlib创建散点图 2017-12-27 作者:淡水化合物 Matplotlib简述: Matplotlib是一个用于创建出高质量图表的桌面绘图包(主要是2D ...

  9. 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析

    作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...

随机推荐

  1. ForkJoin使用

    一.Fork Join 分而治之的办法 JDk为Fork/Join框架提供了很好的支持,我们想要用这个算法首先得创建一个Fork/Join任务,在JDK中这个任务就叫做:ForJoinTask,只要继 ...

  2. vue中关于checkbox数据绑定v-model指令的个人理解

    vue.js为开发者提供了很多便利的指令,其中v-model用于表单的数据绑定很常见, 下面是最常见的例子: <div id='myApp'>     <input type=&qu ...

  3. Java学习之==>条件判断、循环控制

    一.条件判断 1.if-else 示例: /** * 第1种,1个分支 */ public void case1() { int age = 15; if (age > 18) { System ...

  4. C#客户端填充外部IE浏览器中网页文本(input)且不提交

    //引用COM组件//Microsoft HTML Object Library//Microsoft Internet Controls  记得改成x86 SHDocVw.ShellWindows ...

  5. 转载-c++深拷贝和浅拷贝

    转载自:https://blog.csdn.net/u010700335/article/details/39830425 C++中类的拷贝有两种:深拷贝,浅拷贝:当出现类的等号赋值时,即会调用拷贝函 ...

  6. JForum论坛安装以及部署(转)

    链接地址:https://www.cnblogs.com/Amos-Turing/p/7151009.html 下载JForum2.1.9 包手动放到tomcat的webapps下面, 这次打开网址: ...

  7. 【数字图像处理】Bilateral Filters

    [数字图像处理]Bilateral Filters https://www.yuque.com/lart/idh721/bf 简单介绍 双边滤波是一种非线性的可以模糊图像并且能保留一定的边缘信息的技术 ...

  8. python关键字以及含义,用法

    Python常用的关键字   1.and , or and , or 为逻辑关系用语,Python具有短路逻辑,False and 返回 False 不执行后面的语句, True or 直接返回Tru ...

  9. python 并发编程 基于gevent模块实现并发的套接字通信

    之前线程池是通过操作系统切换线程,现在是程序自己控制,比操作系统切换效率要高 服务端 from gevent import monkey;monkey.patch_all() import geven ...

  10. JS 截取字符的方法

    substr() 方法 substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符. stringObject.substr(start,length) start:必需.要抽取的 ...