NumPy作为python科学计算的基础,为何python适合进行数学计算,除了简单易懂,容易学习

Python可以简单的调用大量的用c和fortran编写的legacy的库

Python科学计算的这几个库,单独安装还是蛮麻烦的,所以推荐这个包

http://www.continuum.io/downloads#all

conda list #查看所有的可安装包  
conda install wxpython #安装  
conda install pyqt #安装  
conda update ipython #升级

轻松安装

 

The NumPy ndarray: A Multidimensional Array Object

ndarray,可以理解为n维数组,用于抽象矩阵和向量

Creating ndarrays

最简单的就是,从list初始化,

当然还有其他的方式,比如,

汇总,

 

 

Data Types for ndarrays

首先对于ndarray只能存放同一类型数据,

并且由于封装了c和fortran的库,大家的类型必须要统一,所以ndarrays支持如下类型,
那么各种语言中的类型,都会统一对应到这些类型

ndarray支持显式的类型转换 (copy)

int转float:

string转float:

 

这个比较有用,并且可以看到这里的类型写的float,NumPy会自动将python的类型转成ndarray支持的类型

 

Operations between Arrays and Scalars

对于ndarray里面的elems的操作,是不需要自己写for的
默认对于ndarray或shape相同的ndarray之间的操作,都是会遍历每个element的,称为vectorization,向量化

 

Basic Indexing and Slicing (View)

取出矩阵中的某些数据,或切分出子矩阵

对于一维向量,和python list操作基本是一致的,最大的区别,是ndarray的slicing不会copy,而是view,即你更改slicing,就相当于更改了原始数据

 


可以看到更改arr_slice同样会影响到arr,这样做的原因是,由于经常会操作很大的矩阵,copy会低效,所以默认是不copy的
当然你可以显式的copy,arr[5:8].copy()

二维的,参考下图,

 

Boolean Indexing

这个比较有特点,
对于普通的index,arr[2],这里是指定index第二个
如果我要index多个,并且不连续,怎么办?

其实你可以用一个boolean indexing来一一指定是否需要取出

比如,arr[[True, False, True,False]],注意boolean indexing必须是numpy.array, numpy.matrix也不行,必须getA转成array

对于Numpy中有matrix类的定义,比较坑爹,会混淆

一般不会手工参数这样的boolean indexing,会通过一些条件判断得到

然后你把boolean indexing代入arr就可以取出标为True那维数据


所以必须保证boolean indexing的维数和矩阵中的对应的维数是一样的
比如,
arr[[True, False, True,False]]
必须保证arr是4行的

其实每一维都是可以加上条件过滤的,比如,行选names==Bobs,列选第3列

除了在维度级别进行选择,还能对每个elem进行过滤
比如把data中,所有小于0的,都设为0

 

 

Fancy Indexing

Fancy indexing is a term adopted by NumPy to describe indexing using integer arrays.
和普通的indexing, arr[3], 不同在于,可以指定多个,并且按照指定的顺序返回

选取第4,3,0,6行

注意底下两种的区别,
相当于,取(1, 0), (5, 3), (7, 1), and (2, 2)


行,选取1,5,7,2
列,全选,换顺序

 

Transposing Arrays and Swapping Axes

转置,transposing

arr.T

其实转置是swapaxes的特殊版本,这个可以指定swap哪两个维度

arr.swapaxes(0, 1)

 

Universal Functions: Fast Element-wise Array Functions

这个上面在基本ndarray计算的时候已经介绍过,这里汇总一下
这种vectorized操作分为一元和二元的,

 

Data Processing Using Arrays

Expressing Conditional Logic as Array Operations

vectorized可以用于简化for循环,那么if-else可以简化吗?

numpy.where function is a vectorized version of the ternary expression x if condition else y

np.where(cond, xarr, yarr) 等同于 cond?xarr:yarr

并且,这个还可以嵌套,即如果if…elseif…..elseif……else…

 

Mathematical and Statistical Methods

 

Methods for Boolean Arrays

any和all

 

Unique and Other Set Logic

 

File Input and Output with Arrays

Storing Arrays on Disk in Binary Format (.npy)

压缩存储,并指定别名 (.npz)

Saving and Loading Text Files

 

 

Linear Algebra

 

Random Number Generation

Python For Data Analysis -- NumPy的更多相关文章

  1. 《python for data analysis》第四章,numpy的基本使用

    <利用python进行数据分析>第四章的程序,介绍了numpy的基本使用方法.(第三章为Ipython的基本使用) 科学计算.常用函数.数组处理.线性代数运算.随机模块…… # -*- c ...

  2. Python for Data Analysis 学习心得(一) - numpy介绍

    一.简介 Python for Data Analysis这本书的特点是将numpy和pandas这两个工具介绍的很详细,这两个工具是使用Python做数据分析非常重要的一环,numpy主要是做矩阵的 ...

  3. 数据分析---《Python for Data Analysis》学习笔记【03】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

  4. 数据分析---《Python for Data Analysis》学习笔记【02】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

  5. 数据分析---《Python for Data Analysis》学习笔记【01】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

  6. 《python for data analysis》第十章,时间序列

    < python for data analysis >一书的第十章例程, 主要介绍时间序列(time series)数据的处理.label:1. datetime object.time ...

  7. 《python for data analysis》第九章,数据聚合与分组运算

    # -*- coding:utf-8 -*-# <python for data analysis>第九章# 数据聚合与分组运算import pandas as pdimport nump ...

  8. 《python for data analysis》第七章,数据规整化

    <利用Python进行数据分析>第七章的代码. # -*- coding:utf-8 -*-# <python for data analysis>第七章, 数据规整化 imp ...

  9. 《python for data analysis》第五章,pandas的基本使用

    <利用python进行数据分析>一书的第五章源码与读书笔记 直接上代码 # -*- coding:utf-8 -*-# <python for data analysis>第五 ...

随机推荐

  1. poj 1753

    翻转棋,注意是翻转周围四个的,不是整行列的  汗-_-! 哥的代码风还是不错的 二进制储存状态 Sample Input bwwb bbwb bwwb bwww Sample Output 4 #in ...

  2. 解决:jquery-1.11.1.min.js红叉问题

    工程中导入jquery-1.11.1.min.js,工程正常运行.但是jquery-1.11.1.min.js一直显示红叉. 解决方法如下: 红叉的原因是:myeclipse没有去验证它! 选中js文 ...

  3. 【log4j2 加载配置文件】 加载配置文件的三种方法

    log4j 2读取的配置文件可以分为三类:src下的配置文件.绝对路径的配置文件.相对路径的配置文件. package com.herman.test; import java.io.File; im ...

  4. 数学+高精度 ZOJ 2313 Chinese Girls' Amusement

    题目传送门 /* 杭电一题(ACM_steps 2.2.4)的升级版,使用到高精度: 这次不是简单的猜出来的了,求的是GCD (n, k) == 1 最大的k(1, n/2): 1. 若n是奇数,则k ...

  5. BZOJ3808 : Neerc2012 Labyrinth of the Minotaur

    左上角和右下角不四连通等价于左下角和右上角八连通 枚举正方形的左上角,先二分出最大的边长,使得里面不含障碍物 然后再二分出最小的边长,使得两部分连通,用前缀和判断 这题WA了好久…一直对拍都没问题…于 ...

  6. [NOI 2014]做题记录

    [NOI2014]起床困难综合症 按位贪心 #include <algorithm> #include <iostream> #include <cstring> ...

  7. JSON.stringify语法解析(自己留存)

    语法: JSON.stringify(value [, replacer] [, space]) value:是必选字段.就是你输入的对象,比如数组,类等. replacer:这个是可选的.它又分为2 ...

  8. sum()over()和count()over()分析函数

    创建测试表 ),sales ),dest ),dept ),revenue number); 插入测试数据 ); ); ); ); ); ); ); commit; 查看表记录 SQL> sel ...

  9. #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif

    这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入" ...

  10. Wilddog - 野狗统计

    根据业务需求提出的统计代码. <!DOCTYPE HTML> <html lang="en-US"> <head> <meta chars ...