一.学会使用ndarray

1.1什么是ndarray?

ndarray是NumPy中的一种多维数组对象,他可以是一维的、二维的、甚至更多维次。当然创建更多维次的数组并不是他的优点所在,他的优点在于它有丰富的运算方法,同时他也是另一个高级Python库pandas的基础库,但是他只能存放同种类型的元素。

1. 2创建一个ndarray

第一种创建方式有:直接使用列表创建ndarray,如下:

#第一种直接通过列表创建
a_list=[0,1,2,3,4]
a_ndarray=np.array(a_list)#创建了一个一维的数组
print(type(a_ndarray))

上面创建了一个一维的数组,那么我们也可以创建一个二维、三位的数组

来看下面的代码:

c_list=[[0,0],[1,1,1],[2,2]]#这是一个不规则的二维列表
c_ndarray=np.array(c_list)
print(c_ndarray)#输出数组

输出为:[list([0, 0]) list([1, 1, 1]) list([2, 2])]

第二种创建方式:创建指定形状指定初始值的数组

当我们制定的初始值为0或者1时,我们可以使用函数zeros或者ones这两个函数接受一个元组来表示这个数组的形状。

代码如下:  

#创建指定形状和初始值的ndarray
d_ndarray=np.zeros(3)#指定初始值为0,初始形状为一维长度为3
print(d_ndarray)

输出的结果为:[0. 0. 0.]在这里我们的元素类型为float

e_ndarray=np.ones((3,2))#创建一个数组3行2列
print(e_ndarray)

使用eye函数创建一个N*N的单位矩阵(对角线为1,其余的为0)

f_ndarray=np.eye(3,3)#创建3*3的单位矩阵
print(f_ndarray)

1.3判断ndarray的形状和元素类型

判断一个ndarray的形状使用ndarray的shape属性

e_ndarray=np.ones((3,2))
print(e_ndarray)
print(e_ndarray.shape)#输出形状

输出为:(3, 2)

判断一个ndarray的元素类型

e_ndarray=np.ones((3,2))
print(e_ndarray)
print(e_ndarray.dtype)#输出元素的类型

输出为:float64

1.4ndarray的运算

相乘:

a_ndarray=np.array([[1,2,3],[4,5,6]])
b_ndarray=np.array([[7,8,9],[10,11,12]])
c_ndarray=a_ndarray*b_ndarray#相乘
print(c_ndarray)

输出:[[ 7 16 27]
           [40 55 72]]

可以发现数组相乘是遍历数组的每一个元素进行相乘。

相减:

a_ndarray=np.array([[1,2,3],[4,5,6]])
b_ndarray=np.array([[7,8,9],[10,11,12]])
c_ndarray=a_ndarray-b_ndarray#相减
print(c_ndarray)

输出:[[-6 -6 -6]
           [-6 -6 -6]]

对应的元素相减

取倒数:

d_ndarray=1/a_ndarray #取倒数
print(d_ndarray)

输出:[[1.         0.5        0.33333333]
      [0.25       0.2        0.16666667]]

乘方:.

e_ndarray=a_ndarray**2#乘方
print(e_ndarray)

输出:    [[ 1  4  9]
              [16 25 36]]
1.5ndarray的切片和拷贝
ndarray的切片和list的切片区别:

针对list:

a_list=[1,2,3,4,5]
print(a_list) #第一次输出
b_list=a_list # 直接赋值
b_list[0]=0
print(a_list) #第二次输出

输出:[1, 2, 3, 4, 5]
   [0, 2, 3, 4, 5]

发现通过直接赋值list,改变其中一个另一个也会改变。

a_list=[1,2,3,4,5]
print(a_list)#第一次输出
c_list=a_list[0:len(a_list)] # 使用切片
c_list[0]=0
print(a_list)#第二次输出

输出:[1, 2, 3, 4, 5]
           [1, 2, 3, 4, 5]

我们发现list切片是不会改变原来的元素的,就是完成了一次拷贝将拷贝的list传给了新的list

针对ndarray的切片:

a_list=[1,2,3,4,5]
a_ndarray=np.array(a_list)
b_ndarray=a_ndarray[0:len(a_list)]
print(a_ndarray)#第一次输出
b_ndarray[0]=9
print(a_ndarray)#第二次输出

输出:[1 2 3 4 5]
   [9 2 3 4 5]

我们发现ndarray中的切片赋值也是只是创建了一个新的引用指向原来的对象。

那么在ndarray中想要拷贝就需要用到copy函数,如下:

a_list=[1,2,3,4,5]
a_ndarray=np.array(a_list)
b_ndarray=a_ndarray.copy()
print(a_ndarray)#第一次输出
b_ndarray[:]=9
print(a_ndarray)#第二次输出

输出:[1 2 3 4 5]
   [1 2 3 4 5]

1.6数组的转置:

# 数组的转置
import numpy as np
a_ndarray=np.array([[0,0,0],[1,1,1],[2,2,2]])
print(a_ndarray)
b_ndarray=a_ndarray.T#转置
print(b_ndarray)

输出:[[0 0 0]
      [1 1 1]
      [2 2 2]]
           [[0 1 2]
           [0 1 2]
           [0 1 2]]
1.7精确到元素级别的运算函数

常见一元函数(接受一个数组的函数)有:

abs                    取绝对值

sqrt                    开方

square     平方

exp           计算各个元素的指数

log  log10  log2   去对数底数分别为e、10、2

ceil                      返回大于等于x的最小值

floor                    返回小于等于x的最大值

rint                      将各个元素进行四舍五入得到最接近的整数

isnan                   返回一个bool型数组表示那些是数组

sum                     求和

mean                   算术平均数

std  var                标准差  方差

min  max               最值

sort                       排序

常见的二元的函数(接受两个数组的函数)有:

add                      两个数组对应元素相加

subtract               第一个数组减去第二个数组

multiply                数组元素相乘

1.8直接将txt文件中的内容转入到ndarray数组中

使用函数loadtxt可以将文件中的数据导入ndarray中:

import numpy as np
a_ndaarray=np.loadtxt(r"E:\PythonWork\py学习\test",delimiter=',',encoding='GBK')
print(a_ndaarray)

输出为:

同理savetxt函数是将数组存储到txt文件中

1.9线性代数中的数组(矩阵)运算

diag      返回一个一维数组表示一个矩阵的对角线

T           矩阵转置

dot        矩阵乘法

trace     计算对角线元素的和

det       计算矩阵的行列式

eig        计算矩阵的特征向量

利用Python进行数据处理1——学会使用NumPy的更多相关文章

  1. 利用Python进行数据分析 第4章 NumPy基础-数组与向量化计算(3)

    4.2 通用函数:快速的元素级数组函数 通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数. 1)一元(unary)ufunc,如,sqrt和exp函数 2)二元(unary) ...

  2. 利用Python进行数据分析——pandas入门

    利用Python进行数据分析--pandas入门 基于NumPy建立的 from pandas importSeries,DataFrame,import pandas as pd 一.两种数据结构 ...

  3. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

    http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...

  4. 《利用Python进行数据分析·第2版》第四章 Numpy基础:数组和矢量计算

    <利用Python进行数据分析·第2版>第四章 Numpy基础:数组和矢量计算 numpy高效处理大数组的数据原因: numpy是在一个连续的内存块中存储数据,独立于其他python内置对 ...

  5. 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片

    概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

  6. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  7. 利用Python进行数据分析——Numpy基础:数组和矢量计算

    利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

  8. 高阶NumPy知识图谱-《利用Python进行数据分析》

    所有内容整理自<利用Python进行数据分析>,使用MindMaster Pro 7.3制作,emmx格式,源文件已经上传Github,需要的同学转左上角自行下载或者右击保存图片. 其他章 ...

  9. 利用python进行数据分析PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:hi2j 内容简介 [名人推荐] "科学计算和数据分析社区已经等待这本书很多年了:大量具体的实践建议,以及大量综合应用方法.本书在未来几年里肯定会成为Python领域中技术计 ...

随机推荐

  1. 在递归函数中使用JQuery.Deferred,异步请求中的同步执行...

    标题不知道怎么起合适,其实需求很简单: 黑色背景的容器在页面打开时是隐藏的,点击提交后显示. 然后开始执行递归方法,每次ajax请求完成时,更新容器内容. 在全部执行完成后输出“执行完成”. subm ...

  2. implode() 数组元素组合函数

    定义和用法 implode() 函数把数组元素组合为一个字符串. 语法:implode(separator,array); 说明 虽然 separator 参数是可选的.但是为了向后兼容,推荐您使用使 ...

  3. React 的坑

    MemoryRouter 会缓存组件,导致有时候 componentDidMount 不会执行

  4. 我只想要Linux的IP地址

    大家都知道ifconfig 可以查看centos的ip地址,但是我如果只要ip地址该怎么办呢?首先上ifconfig [root@centos ~]# ifconfig eth0 eth0 Link ...

  5. hibernate @OneToMany等注解设置查询过滤条件

    如实体PdOrg对象中有users对象,数据库user表有字段DEL_FLAG(0:删除:1:未删除): private List<User> users= new ArrayList&l ...

  6. 算法面试题(python)——如何找出数组中出现一次的数

    题目描述: 一个数组里,除了三个数是唯一出现的,其余的数都出现了偶数次,找出这三个数中任意一个.比如数组序列为[1,2,4,5,6,4,2],只有1.5.6这三个数字是唯一出现的,数字2.4均出现了偶 ...

  7. maven生命周期和插件详解

    生命周期 什么是生命周期? maven的生命周期就是对所有的构建过程进行抽象和统一.maven从大量项目和构建工具中总结了一套高度完善的.易扩展的生命周期.这个生命周期包含项目的清理.初始化.编译.测 ...

  8. [Oracle][DATAGUARD] LOGICAL STANDBY环境里,有些SEQUENCE无法应用,导致Primary和Standby无法同期

    今天遇到了一个客户,问题是这样的,客户构筑了一个RACtoRAC的 LOGICAL STANDBY环境.并用EM在监视同期情况,发现EM页面上55115和55116这两个SEQUENCE一直在应用. ...

  9. dom编程艺术笔记1--第二章

    第二章语法部分: 1.js注释:<!-- XXXXX 而“-->”这部分js会认为是注释内容的一部分 2.var 声明变量 不用声明变量类型 3.声明使用一个数组语法:var object ...

  10. 利用svn的补丁文件打包生成增量文件

    下面的代码是maven版本 1. 创建patch.txt增量文件 保存到 文件目录下 比如 E:\aa\patch.txt 2. 编写java代码 package utils; import java ...