numpy.array

numpy.array是numpy中用于处理n阶数组的对象,是其类族中的重要基类。

numpy.array可以表示任意维的数组,可以使用构造函数初始化:

  1. arr = numpy.array( [ [1,2], [3,4] ] )

上述数组可以由arange和reshape得到:

  1. 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]式索引的支持。

如果对高维数组只使用低维索引将其看作低一维的数组的列表进行索引。

对高维数组的迭代,是将其看作低一维的数组在最左侧轴上的迭代。

  1. >>> arr = arange(1,5).reshape(2,2)
  2. >>> arr[0,1]
  3. 2
  4. >>> arr[0][1]
  5. 2
  6. >>> arr[1]
  7. array([3, 4])
  8. >>> for i in arr:
  9. ... print(i)
  10. ...
  11. [1 2]
  12. [3 4]

改变数组形状

  • ravel

将数组展开为一维,采用"C风格"的展开,最右侧的索引最先变化

  • reshape

改变数组各维的形状,接受各维长度作为参数。如上文示例:

  1. 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返回修改后的对象,原对象不变。

  1. >>> arr = arange(1,5)
  2. >>> arr
  3. array([1, 2, 3, 4])
  4. >>> arr2= arr.reshape(2,2)
  5. >>> arr2
  6. array([[1, 2],
  7. [3, 4]])
  8. >>> arr
  9. array([1, 2, 3, 4])
  10. >>> arr3 = arr.resize(2,2)
  11. >>> arr
  12. array([[1, 2],
  13. [3, 4]])
  14. >>> arr3

复制与视图

复制引用

在引用之间相互赋值只是使得多个引用指向同一对象,内存中的对象不复制。这与Python内存对象是一致的。

  1. >>> a = arange(12)
  2. >>> b = a
  3. >>> b is a
  4. True

视图与浅拷贝

视图用于不同的数组对象分享同一个数据。

视图方法创造一个新的数组对象指向同一数据:

  1. >>> arr = arange(1,5)
  2. >>> v = arr.view()
  3. >>> v
  4. array([[1, 2],
  5. [3, 4]])
  6. >>> arr[0,0] = 6
  7. >>> v
  8. array([[6, 2],
  9. [3, 4]])

数组切片同样是创建了视图。

深拷贝

  1. >>> arr = arange(1,5)
  2. >>> c = arr.copy()
  3. >>> arr[0] = 6
  4. >>> c
  5. 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

求线性方程组特解

  1. >>> a = array([[3, 1, -2], [1, -1, 4], [2, 0, 3]])
  2. >>> b = array([5, -2, 2.5])
  3. >>> x = solve(a, b)
  4. >>> x
  5. array([ 0.5, 4.5, 0.5])
  • numpy.linalg.matrix_rank(a)

矩阵求秩,线性代数意义上的秩,而非numpy定义的所谓"秩"。

  1. >>> numpy.linalg.matrix_rank(a)
  2. 3
  • svd

svd分解函数(奇异值分解)可用来求线性方程组通解:

  1. >>> a = array([[2, -2, -4], [-1, 3, 4], [1, -2, -3]])
  2. >>> s, v, d = linalg.svd(a)
  3. >>> compress(v < 1e-10, d, axis=0)
  4. array([[-0.57735027, 0.57735027, -0.57735027]])

更多numpy常用方法请参见numpy doc routines

numpy的官方文档非(sha)常(yong)好(mei)用(you),可以考虑看下面的参考资料:

python线性代数

numpy使用指南的更多相关文章

  1. NumPy 初学者指南中文第三版·翻译完成

    原文:NumPy: Beginner's Guide - Third Edition 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅 ...

  2. Numpy用户指南

    Numpy是Python语言的一个扩展库,支持大量的维度数组和矩阵运算,此外也针对数组运算提供大量的数学函数库. Mumpy是一个运行速度非常快的数学库,主要用于数组计算,包涵: 1.一个强大的N维数 ...

  3. 『Numpy学习指南』Matplotlib绘图

    数据生成: import numpy as np import matplotlib.pyplot as plt func = np.poly1d(np.array([,,,])) func1 = f ...

  4. 『Numpy学习指南』排序&索引&抽取函数介绍

    排序: numpy.lexsort(): numpy.lexsort()是个排字典序函数,因为很有意思,感觉也蛮有用的,所以单独列出来讲一下: 强调一点,本函数只接受一个参数! import nump ...

  5. 【NumPy学习指南】day5 改变数组的维度

    我们已经学习了怎样使用reshape函数,现在来学习一下怎样将数组展平. (1) ravel 我们可以用ravel函数完成展平的操作: In: b Out: array([[[ 0, 1, 2, 3] ...

  6. 【NumPy学习指南】day4 多维数组的切片和索引

    ndarray支持在多维数组上的切片操作.为了方便起见,我们可以用一个省略号(...)来 表示遍历剩下的维度. (1) 举例来说,我们先用arange函数创建一个数组并改变其维度,使之变成一个三维数组 ...

  7. numpy快速指南

    Quickstart tutorial 引用https://docs.scipy.org/doc/numpy-dev/user/quickstart.html Prerequisites Before ...

  8. NumPy学习指南(第2版)

    第一章 NumPy快速入门 首先,我们将介绍如何在不同的操作系统中安装NumPy和相关软件,并给出使用NumPy的简单示例代码. 然后,我们将简单介绍IPython(一种交互式shell工具). 如前 ...

  9. NumPy(Numeric Python)使用方法

    NumPy官网 参考:<Python数据分析基础教程:NumPy学习指南> 用Python做科学计算(好东西) NumPy是python的核心库,是python机器学习编程的最底层的库,不 ...

随机推荐

  1. ProcessHacker学习笔记

    ProcessHacker学习笔记 ProcessHacker是一款拥有windows任务管理器的开源软件.学习该软件,可增长windows操作系统多方面系统机制知识和性能统计设计的能力. 1.获取进 ...

  2. AndroidStudio 3 export jar file

    1.  File -> New -> New Module -> Android Library  例子中暂命名ModuleA 2. 修改刚创建 ModuleA下的build.gra ...

  3. MySQL skip-character-set-client-handshake导致的一个字符集问题

    http://www.quweiji.com/mysql-skip-character-set-client-handshake%E5%AF%BC%E8%87%B4%E7%9A%84%E4%B8%80 ...

  4. React Native桥接器初探

    本文假设你已经有一定的React Native基础,并且想要了解React Native的JS和原生代码之间是如何交互的. React Native的工作线程 shadow queue:布局在这个线程 ...

  5. Nginx 教程

    开源版:http://nginx.org 商业版:http://nginx.com 阿里Tengine OpenResty开源版.商业版 视频教程:哔哩哔哩 菜鸟教程:nginx安装 1.初识 Nig ...

  6. NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成

    本篇内容属于非实用性(拿来即用)介绍,如对框架设计没兴趣的朋友,请略过. 快一个月没有写博文了,最近忙着两件事;    一:阅读刘墉先生的<说话的魅力>,以一种微妙的,你我大家都会经常遇见 ...

  7. Android开发 - 掌握ConstraintLayout(五)偏差(Bias)

    比如实现这样一个场景: "在屏幕宽度的1/4的地方放置一个View" 使用传统布局时,实现按照屏幕的宽度(高度),或者相对两个View之间距离的一个比例来进行布局,就显得非常麻烦, ...

  8. node.js使用redis储存session(详细步骤)

    转储session的原因 网上有许多session需要用数据库储存的原因,对我来说原因很简单,仅仅只是node的生产环境不允许将session存到服务器的内存中.会报一个内存溢出的风险警告.所以我决定 ...

  9. JavaScript 函数式编程读书笔记1

    概述 这是我读<javascript函数式编程>的读书笔记,供以后开发时参考,相信对其他人也有用. 说明:虽然本书是基于underscore.js库写的,但是其中的理念和思考方式都讲的很好 ...

  10. ElasticSearch权威指南学习(排序)

    排序方式 相关性排序 默认情况下,结果集会按照相关性进行排序 -- 相关性越高,排名越靠前. 相关性分值会用_score字段来给出一个浮点型的数值,所以默认情况下,结果集以_score进行倒序排列. ...