numpy使用指南
numpy.array
numpy.array是numpy中用于处理n阶数组的对象,是其类族中的重要基类。
numpy.array可以表示任意维的数组,可以使用构造函数初始化:
arr = numpy.array( [ [1,2], [3,4] ] )
上述数组可以由arange和reshape得到:
arr = arange(1,5).reshape(2,2)
numpy.array包含的重要属性:
- ndim
数组的维数,在线性代数中称为秩。
- shape
一个指示数组在每个维度上大小的整数元组
- size
数组元素的总个数,等于shape属性中元组元素的乘积。
- dtype
一个用来描述数组中元素类型的对象,可以使用Python标准类型,numpy类型以及自定义类型。
- itemsize
数组中每个元素的字节大小
- data
包含实际数组元素的缓冲区,通常使用索引来使用数组中的元素所以不需要使用这个属性。
切片,迭代
numpy.array支持Python中的索引与切片操作,允许使用负索引。可以使用数组的切片访问原数组。
且提供了arr[x,y,..]
式的索引操作,并保留了对Python内置arr[x][y]
式索引的支持。
如果对高维数组只使用低维索引将其看作低一维的数组的列表进行索引。
对高维数组的迭代,是将其看作低一维的数组在最左侧轴上的迭代。
>>> arr = arange(1,5).reshape(2,2)
>>> arr[0,1]
2
>>> arr[0][1]
2
>>> arr[1]
array([3, 4])
>>> for i in arr:
... print(i)
...
[1 2]
[3 4]
改变数组形状
- ravel
将数组展开为一维,采用"C风格"的展开,最右侧的索引最先变化
- reshape
改变数组各维的形状,接受各维长度作为参数。如上文示例:
arr = arange(1,5).reshape(2,2)
arange(1,5)生成[1,5)中整数组成的序列:array([1,2,3,4]);reshape(2,2)将其重置为2*2的数组array([[1,2],[3,4]])。
- resize
resize与reshape接受同样的参数,并改变数组各维的形状。
但是resize修改原对象,不返回对象,reshape返回修改后的对象,原对象不变。
>>> arr = arange(1,5)
>>> arr
array([1, 2, 3, 4])
>>> arr2= arr.reshape(2,2)
>>> arr2
array([[1, 2],
[3, 4]])
>>> arr
array([1, 2, 3, 4])
>>> arr3 = arr.resize(2,2)
>>> arr
array([[1, 2],
[3, 4]])
>>> arr3
复制与视图
复制引用
在引用之间相互赋值只是使得多个引用指向同一对象,内存中的对象不复制。这与Python内存对象是一致的。
>>> a = arange(12)
>>> b = a
>>> b is a
True
视图与浅拷贝
视图用于不同的数组对象分享同一个数据。
视图方法创造一个新的数组对象指向同一数据:
>>> arr = arange(1,5)
>>> v = arr.view()
>>> v
array([[1, 2],
[3, 4]])
>>> arr[0,0] = 6
>>> v
array([[6, 2],
[3, 4]])
数组切片同样是创建了视图。
深拷贝
>>> arr = arange(1,5)
>>> c = arr.copy()
>>> arr[0] = 6
>>> c
array([1, 2, 3, 4])
在内存中创建新的对象。
matrix类
[待完成]
通用函数
numpy.array的运算符仍为对应元素之间的算术运算,矩阵的拼接与线性代数运算需要使用通用函数来完成。
矩阵拼接
vstack(a,b) 纵向拼接
hstack(a,b) 横向拼接
线性代数运算
- transpose(a) / a.transpose()
矩阵转置
- dot(a,b)
向量内积
- cross(a,b)
向量外积
- inv(a)
矩阵求逆
- det(a)
求行列式
- trace(a)
求迹(主对角线元素和)
- solve
求线性方程组特解
>>> a = array([[3, 1, -2], [1, -1, 4], [2, 0, 3]])
>>> b = array([5, -2, 2.5])
>>> x = solve(a, b)
>>> x
array([ 0.5, 4.5, 0.5])
- numpy.linalg.matrix_rank(a)
矩阵求秩,线性代数意义上的秩,而非numpy定义的所谓"秩"。
>>> numpy.linalg.matrix_rank(a)
3
- svd
svd分解函数(奇异值分解)可用来求线性方程组通解:
>>> a = array([[2, -2, -4], [-1, 3, 4], [1, -2, -3]])
>>> s, v, d = linalg.svd(a)
>>> compress(v < 1e-10, d, axis=0)
array([[-0.57735027, 0.57735027, -0.57735027]])
更多numpy常用方法请参见numpy doc routines
numpy的官方文档非(sha)常(yong)好(mei)用(you),可以考虑看下面的参考资料:
numpy使用指南的更多相关文章
- NumPy 初学者指南中文第三版·翻译完成
原文:NumPy: Beginner's Guide - Third Edition 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅 ...
- Numpy用户指南
Numpy是Python语言的一个扩展库,支持大量的维度数组和矩阵运算,此外也针对数组运算提供大量的数学函数库. Mumpy是一个运行速度非常快的数学库,主要用于数组计算,包涵: 1.一个强大的N维数 ...
- 『Numpy学习指南』Matplotlib绘图
数据生成: import numpy as np import matplotlib.pyplot as plt func = np.poly1d(np.array([,,,])) func1 = f ...
- 『Numpy学习指南』排序&索引&抽取函数介绍
排序: numpy.lexsort(): numpy.lexsort()是个排字典序函数,因为很有意思,感觉也蛮有用的,所以单独列出来讲一下: 强调一点,本函数只接受一个参数! import nump ...
- 【NumPy学习指南】day5 改变数组的维度
我们已经学习了怎样使用reshape函数,现在来学习一下怎样将数组展平. (1) ravel 我们可以用ravel函数完成展平的操作: In: b Out: array([[[ 0, 1, 2, 3] ...
- 【NumPy学习指南】day4 多维数组的切片和索引
ndarray支持在多维数组上的切片操作.为了方便起见,我们可以用一个省略号(...)来 表示遍历剩下的维度. (1) 举例来说,我们先用arange函数创建一个数组并改变其维度,使之变成一个三维数组 ...
- numpy快速指南
Quickstart tutorial 引用https://docs.scipy.org/doc/numpy-dev/user/quickstart.html Prerequisites Before ...
- NumPy学习指南(第2版)
第一章 NumPy快速入门 首先,我们将介绍如何在不同的操作系统中安装NumPy和相关软件,并给出使用NumPy的简单示例代码. 然后,我们将简单介绍IPython(一种交互式shell工具). 如前 ...
- NumPy(Numeric Python)使用方法
NumPy官网 参考:<Python数据分析基础教程:NumPy学习指南> 用Python做科学计算(好东西) NumPy是python的核心库,是python机器学习编程的最底层的库,不 ...
随机推荐
- ABP框架系列之二十四:(Email-Sending-EF-电子邮件发送)
Introduction Email sending is a pretty common task for almost every application. ASP.NET Boilerplate ...
- python模块:json
r"""JSON (JavaScript Object Notation) <http://json.org> is a subset of JavaScri ...
- 隔行变色---简单的css js控制table隔行变色
(1)用expression 鼠标滑过变色: <style type="text/css"><!-- table { background-color:#0000 ...
- 转 Master-Worker模式 并行程序设计模式--Master-Worker模式
简介 Master-Worker模式是常用的并行设计模式.它的核心思想是,系统有两个进程协议工作:Master进程和Worker进程.Master进程负责接收和分配任务,Worker进程负责处理子任务 ...
- 22.LinkedList
LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口链表的实现.基于链表实现的方式使得Linked ...
- fork()函数、进程表示符、进程位置
linux.centos6.5 fork()函数:作用于创建子进程.返回值有两个,一个是向父进程返回它的pid,一个是返回0: eg1: #include<stdio.h> #includ ...
- 给uniGUI的表格控件uniDBGrid加上记录序号的列
uniDBGrid使用起来还是很方便的,但就是没有显示记录序号的功能,必须自己加,参照老外给的解决方案如下: 方案1: 1- 在UniDBGrid建一个第一列 (列的名字起“NO”) 2- 在 Uni ...
- Linux-程序包管理
Linux上的软件安装有2种形式:源码.二进制文件,源码需要在编译环境下编译安装,二进制可以直接安装. 1.程序包管理器 rpm 程序包管理器能够将目标二进制格式(也就是从源码编译好的二进制文件,包括 ...
- WITH RECOMPILE和OPTION(RECOMPILE)区别仅仅是存储过程级重编译和SQL语句级重编译吗
在考虑重编译T-SQL(或者存储过程)的时候,有两种方式可以实现强制重编译(前提是忽略导致重编译的其他因素的情况下,比如重建索引,更新统计信息等等), 一是基于WITH RECOMPILE的存储过程级 ...
- 背水一战 Windows 10 (73) - 控件(控件基类): UIElement - 拖放的基本应用, 手动开启 UIElement 的拖放操作
[源码下载] 背水一战 Windows 10 (73) - 控件(控件基类): UIElement - 拖放的基本应用, 手动开启 UIElement 的拖放操作 作者:webabcd 介绍背水一战 ...