1.基础知识
NumPy的主要对象是多维数组。它是由相同元素(通常是数字)组成的,通过正整数元组(tuple)作为索引的表格。
在数组中,纬度(dimensional)被称为轴(axis),轴的数量被称为级(rank),如下面这个数组,它有两个轴(axis),第一个纬度(dimension,或者称为轴axis)长度为2(既纵向),第二个纬度长度为三(既横向)。

[[ 1., 0., 0.],
[ 0., 1., 2.]]

Numpy的数组类被称为ndarray,别名array。要注意numpy.array并不等同于Python标准库中的array.array,标准库中的array只提供了一维数组还有很少的函数。
1.1 数组的属性
ndarray对象的主要属性有:
ndarray.ndim 纬度或者轴的数量
ndarray.shape 数组的每个纬度的尺寸
ndarray.size 数组元素的总个数
ndarray.dtype 数组元素的类型
ndarray.itemsize 数组元素二进制的大小
ndarray.data 数组元素容器(不常用)

>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<type 'numpy.ndarray'>
>>> b = np.array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
<type 'numpy.ndarray'>

1.2 创建数组
通过列表(list)或者元组(tuple)和array()函数来建立数组。元素的类型会依据序列中元素的类型来判定。

>>> import numpy as np
>>> a = np.array([2,3,4])
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int64')
>>> b = np.array([1.2, 3.5, 5.1])
>>> b.dtype
dtype('float64')

数组将会把序列的序列转换为二维数组,将序列的序列的序列转化为三维数组。

>>> b = np.array([(1.5,2,3), (4,5,6)])
>>> b
array([[ 1.5, 2. , 3. ],
[ 4. , 5. , 6. ]])

可以提前设置数组的类型

>>> c = np.array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j, 2.+0.j],
[ 3.+0.j, 4.+0.j]])

NumPy提供了创建包含占位符的数组的函数,这样就可以初始化内容不先预先确定的数组。

>>> np.zeros( (3,4) )
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
>>> np.ones( (2,3,4), dtype=np.int16 ) # dtype can also be specified
array([[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]],
[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]]], dtype=int16)
>>> np.empty( (2,3) ) # uninitialized, output may vary
array([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260],
[ 5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])

NumPy提供了和range()类似的函数arange()来直接创建序列数组。

>>> np.arange( 10, 30, 5 )
array([10, 15, 20, 25])
>>> np.arange( 0, 2, 0.3 ) # it accepts float arguments
array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])

类似的我们还可以使用linspace()函数来创建,注意参数的不同之处

>>> from numpy import pi
>>> np.linspace( 0, 2, 9 ) # 9 numbers from 0 to 2
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
>>> x = np.linspace

1.3 打印数组
打印数组遵循以下三个规律:
1)最后一个轴是从左往右打印
2)倒数第二个轴是从上往下打印
3)剩下的轴也是从上到下,每个片段会用空白的行隔开

>>> a = np.arange(6) # 1d array
>>> print(a)
[0 1 2 3 4 5]
>>>
>>> b = np.arange(12).reshape(4,3) # 2d array
>>> print(b)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
>>>
>>> c = np.arange(24).reshape(2,3,4) # 3d array
>>> print(c)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]

如果数组太大,那么NumPy会跳过中间的数据,如果不想着这样需要设置打印选项

>>> np.set_printoptions(threshold='nan')

1.4 基本操作
算数运算会被作用在元素对元素。结果会输出为新的数组。

>>> a = np.array( [20,30,40,50] )
>>> b = np.arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> 10*np.sin(a)
array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854])
>>> a<35
array([ True, True, False, False], dtype=bool)

不同于其他语言的矩阵运算,积运算符(*)也是元素对元素,如果想进行矩阵积运算则需要使用dot()函数:

>>> A = np.array( [[1,1],
... [0,1]] )
>>> B = np.array( [[2,0],
... [3,4]] )
>>> A*B # elementwise product
array([[2, 0],
[0, 4]])
>>> A.dot(B) # matrix product
array([[5, 4],
[3, 4]])
>>> np.dot(A, B) # another matrix product
array([[5, 4],
[3, 4]])

一些运算,比如+=,*=会对本身进行更改,而不会产生新数组:

>>> a = np.ones((2,3), dtype=int)
>>> b = np.random.random((2,3))
>>> a *= 3
>>> a
array([[3, 3, 3],
[3, 3, 3]])
>>> b += a
>>> b
array([[ 3.417022 , 3.72032449, 3.00011437],
[ 3.30233257, 3.14675589, 3.09233859]])

当两种不同类型的数组进行运算时,结果将会和更一般的或者精确度更高的数组保持一致。

>>> a = np.ones(3, dtype=np.int32)
>>> b = np.linspace(0,pi,3)
>>> b.dtype.name
'float64'
>>> c = a+b
>>> c
array([ 1. , 2.57079633, 4.14159265])
>>> c.dtype.name
'float64'
>>> d = np.exp(c*1j)
>>> d
array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,
-0.54030231-0.84147098j])
>>> d.dtype.name
'complex128'

ndarray也可以进行一元运算:

>>> a = np.random.random((2,3))
>>> a
array([[ 0.18626021, 0.34556073, 0.39676747],
[ 0.53881673, 0.41919451, 0.6852195 ]])
>>> a.sum()
2.5718191614547998
>>> a.min()
0.1862602113776709
>>> a.max()
0.6852195003967595

默认情况下,这些运算会把整个数组当成一个list,而忽略了它的纬度。但是,你可以指定轴(axis)。

>>> b = np.arange(12).reshape(3,4)
>>> b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>>
>>> b.sum(axis=0) # sum of each column
array([12, 15, 18, 21])
>>>
>>> b.min(axis=1) # min of each row
array([0, 4, 8])
>>>
>>> b.cumsum(axis=1) # cumulative sum along each row
array([[ 0, 1, 3, 6],
[ 4, 9, 15, 22],
[ 8, 17, 27, 38]])

1.5 通用函数
NumPy提供了常用的数学函数比如sin、cos、exp,运算后将会返回数组。

>>> B = np.arange(3)
>>> B
array([0, 1, 2])
>>> np.exp(B)
array([ 1. , 2.71828183, 7.3890561 ])
>>> np.sqrt(B)
>array([ 0. , 1. , 1.41421356])
>>> C = np.array([2., -1., 4.])
>>> np.add(B, C)
array([ 2., 0., 6.])

1.6 索引、切片和迭代
一维数组的操作就像list等其他的python序列一样。

>>> a = np.arange(10)**3
>>> a
array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]
array([ 8, 27, 64])
>>> a[:6:2] = -1000 # equivalent to a[0:6:2] = -1000; from start to position 6, exclusive, set every >>> a
array([-1000, 1, -1000, 27, -1000, 125, 216, 343, 512, 729])
>>> a[ : :-1] # reversed a
array([ 729, 512, 343, 216, 125, -1000, 27, -1000, 1, -1000])
>>> for i in a:
... print(i**(1/3.))
...
nan
1.0
nan
3.0
nan
5.0
6.0
7.0
8.0
9.0

多维数组可以通过不同轴进行索引。

>>> def f(x,y):
... return 10*x+y
...
>>> b = np.fromfunction(f,(5,4),dtype=int)
>>> b
array([[ 0, 1, 2, 3],
[10, 11, 12, 13],
[20, 21, 22, 23],
[30, 31, 32, 33],
[40, 41, 42, 43]])
>>> b[2,3]
23
>>> b[0:5, 1] # each row in the second column of b
array([ 1, 11, 21, 31, 41])
>>> b[ : ,1] # equivalent to the previous example
array([ 1, 11, 21, 31, 41])
>>> b[1:3, : ] # each column in the second and third row of b
array([[10, 11, 12, 13],
[20, 21, 22, 23]])

迭代器:

>>> for row in b:
... print(row)
...
[0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]

如果想迭代出每一个元素,则可以使用flat属性:

>>> for element in b.flat:
... print(element)
...
0
1
2
3
10
11
12
13
20
21
22
23
30
31
32
33
40
41
42
43

Python numpy基础知识相关推荐

  1. python的基础知识可以应用到哪方面-Python基础知识

    python基础 python的诞生 2002年,python 2.x 2008年,python 3.x python的命名 马戏团的名称 python简介 简单.易学 持快速开发. 跨平台. 开源. ...

  2. Python考试基础知识

    Python考试基础知识 一.python的基本语法(包括包的导入) 二.序列类型的数据结构(重点考察列表及其基本方法) 1.前言 2.list 内容简介 2.1 list简介 2.2 list常用函 ...

  3. python图像处理基础知识(cv库函数说明)

    python图像处理基础知识,函数说明 目录 python图像处理基础知识,函数说明 1.处理照片(open_cv库) 1.1 cv2.imread('filepath',flags) 1.2 cv2 ...

  4. 这是一个新的开始 复习python的基础知识 fighting!

    由于受伤的原因 我在上大学前就喜欢的技术内容被耽搁了好久 现在我就要 重新捡拾起来 先从 python的基础知识开始 内容如下: # -*- coding: utf-8 -*- "" ...

  5. python基础1:认识python和基础知识

    第一章 认识python和基础知识 本章目录 1.1. 认识python(了解)1.2. 第一个python程序1.3. 注释1.4. 变量以及类型1.5. 标示符和关键字1.6. 输出1.7. 输入 ...

  6. python open-cv 基础知识总结(三)

    上一章:python open-cv 基础知识总结(二) 1. 轮廓中心计算 本教程的目标是 (1)  检测图像中每个形状的轮廓, (2)  计算轮廓的中心 -也称为区域的  质心 . 为了实现这些目 ...

  7. python编程基础知识体系_最新版 17 幅思维导图:Python 编程之核心知识体系

    原标题:最新版 17 幅思维导图:Python 编程之核心知识体系 导读:本文主要涵盖了 Python 编程的核心知识,展示了一系列思维导图,主要就 Python 核心基础知识进行了细致梳理.无论你是 ...

  8. python代码计算矩形面积_学习资料Python语言基础知识笔记以及答案

    01. Python语言基础知识等笔记: 02. Python作业答案: [例2-3]通过输入函数input()输入股票代码.股票名称.当天股票最高价和最低价,通过输出函数print()输出股票代码+ ...

  9. python基础实例-Python入门基础知识实例,值得收藏!

    7月的编程语言指数榜已经发布,Python 在今年5月首次超越 Java 拿下榜首位置后,仍保持上涨趋势,正逐渐与 Java 拉开差距.(图为与去年 7 月数据对比) 上周为大家简单介绍了如何安装Py ...

最新文章

  1. page fault in nonpaged area 蓝屏_记一次蓝屏0x00000050
  2. iOS无法导入头文件
  3. Leetcode 210. 课程表 II 解题思路及C++实现
  4. 宝塔面板怎么运行python_在宝塔面板配置Nginx的步骤
  5. Android中的资源复用小技巧
  6. python query方法_Pandas dataframe.query方法语法
  7. 在WIN7下用NETSH命令有效防止ARP攻击
  8. linux中c表示字符设备文件符号
  9. vue基础----用vue来展示表格数据
  10. 亿网文交孟建州艺术品该怎么鉴别,代码分析
  11. Apple Watch Ultra和Apple Watch Series 8 区别 续航 功能介绍
  12. Twitter爬虫Python库Tweepy 附中英文官方文档
  13. JVM之运行时数据区(方法区)
  14. 理解sklearn.processing.scale中使用有偏总体标准差
  15. 说一说场内基金和场外基金的区别
  16. 2021年淮安淮安中学高考成绩查询,2021镇江市地区高考成绩排名查询,镇江市高考各高中成绩喜报榜单...
  17. oracle sql查询字段中以“;”分割的字符串,转化成对应的,以“;”分割的文字串
  18. 分布式ID雪花算法-解析
  19. 【Web技术】772- Web 中文字体性能优化实践
  20. 掌上实验室V8系列教程(二)跑马灯

热门文章

  1. python dataframe 取一行_python – Pandas dataframe获取每个组的第一行
  2. 微课|中学生可以这样学Python(5.6.1节):列表推导式2
  3. Python使用扩展库tqdm显示进度条
  4. Python使用递归法对整数进行因数分解
  5. 基于非递归算法的汉诺塔游戏之Python实现
  6. 离职通知邮件主题写什么好_(原创)拿到了企业的offer后要注意什么?
  7. JAVA 第1课 开始前的准备
  8. mysql 修改这段长度_MySQL中使用group_concat()函数数据被截取(有默认长度限制),谨慎!...
  9. 力扣977,有序数组的平方(JavaScript)
  10. 系统引导的过程一般包括如下几步: 【 】_20190317工控维修日记(西门子系统第二讲)...