Numpy 入门指南

array基本属性

Numpy的主要对象是同构多维数组。它是一个元素表,所有类型都相同,由非负整数元组构成索引。

Numpy的数组类被调用为ndarray。存在以下属性:

•ndarray.ndim:数组的轴(维度)的个数。•ndarray.shape:数组的维度。一个整数元组,表示每个维度中数组的大小。对于有n行和m列的矩阵,shape将是(n,m),即shape元组长度就是rank或者维度的个数ndim。• ndarray.size:数组元素的总数。•ndarray.dtype:一个描述数组中元素类型的对象 。• ndarray.itemsize:数组中每个元素的字节大小。例如,元素为 float64 类型的数组的 itemsize 为8(=64/8),而 complex32 类型的数组的 itemsize 为4(=32/8)。它等于 ndarray.dtype.itemsize 。

import numpy as np 

#如何将列表转化为矩阵array=np.array([[1,2,3],[2,3,4]])print(array)#查看维度ndimprint('number of dim: ',array.ndim)##output:  number of dim:  2#查看几行几列print('shape: ',array.shape)##output:  shape:  (2, 3)#查看元素个数 print('size: ',array.size)##output:  size:  6

创建数组

np.array

使用array函数从python元组中创建数组, 默认情况下,创建的数组的dtype是 float64 类型的。

import numpy as np#创建一维数组,ndim=1a=np.array([2,23,4],dtype=np.int32)print(a)##output:[ 2 23  4]

#创建二维数组b = np.array([(1.5,2,3), (4,5,6)])print(b)##output: [[ 1.5  2.   3. ]##         [ 4.   5.   6. ]]

注意:常见错误是,调用array时候传入多个数字参数,而不提供单个数字的列表类型作为参数。

>>> a = np.array(1,2,3,4)    # WRONG>>> a = np.array([1,2,3,4])  # RIGHT

np.zeros

创建一个全为0的数组 .

>>> np.zeros( (3,4) )array([[ 0.,  0.,  0.,  0.],[ 0.,  0.,  0.,  0.],[ 0.,  0.,  0.,  0.]])

np.ones

创建一个全为1的数组 .

>>> np.ones((2,3,4), dtype=np.int16) # dtype can also be specifiedarray([[[ 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

创建一个数组,其初始内容是随机的,取决于内存的状态。

>>> np.empty( (2,3) )    # uninitialized, output may varyarray([[  3.73603959e-262,   6.02658058e-154,   6.55490914e-260],[  5.30498948e-313,   3.14673309e-307,   1.00000000e+000]])

np.arange

该函数返回指定范围内数组而不是列表 。(注意是左包含即[start,stop) )

numpy.arange([start, ]stop, [step, ]dtype=None, *, like=None)

主要参数:start--开始;step--结束;step:步长

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

np.linspace

arange与浮点参数一起使用时,由于有限的浮点精度,通常不可能预测所获得的元素的数量。出于这个原因,通常最好使用linspace函数来接收我们想要的元素数量的函数,而不是步长(step)

def linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None,axis=0):
>>> from numpy import pi>>> np.linspace( 0, 2, 9 )# 9 numbers from 0 to 2array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ,  1.25,  1.5 ,  1.75,  2.  ])>>> x = np.linspace( 0, 2*pi, 100 )# useful to evaluate function at lots of points>>> f = np.sin(x)

数组基本运算

加减运算

import numpy as np #加减运算a=np.array([10,20,30,40])b=np.arange(4)print(a,b)##[10 20 30 40] [0 1 2 3]c=a+bd=a-bprint(c,d)##[10 21 32 43] [10 19 28 37]

点乘、叉乘

import numpy as np 

a=np.array([10,20,30,40])b=np.arange(4)#叉乘c=a*bprint("\n叉乘运算:",c)##output:叉乘运算: [  0  20  60 120]

#点乘aa=np.array([[1,1],[0,1]])bb=np.arange(4).reshape((2,2))c_dot=np.dot(aa,bb)c_dot_2=aa.dot(bb)

print("\n点乘运算之一:",c_dot)##点乘运算之一: [[2 4]##             [2 3]]print("\n点乘运算之二:",c_dot_2)##点乘运算之二: [[2 4]##             [2 3]]

乘方

使用a**b表示a的b次方

import numpy as np b=np.arange(4)#乘方运算f=b**2print("\n乘方运算:",f)#output:[0 1 4 9]

逻辑运算

快速查找数组中符合条件的值,涉及到>、=、 <= 、!=,返回一个全为布尔值的数组

import numpy as np b=np.arange(4)##output:[0 1 2 3]#快速查找符合要求的值,逻辑判断print(b==3,'\n')#output :[False False False  True]print(b!=3,'\n')#output:[ True  True  True False]

转秩

import numpy as npB=np.arange(14,2, -1).reshape((3,4))# B :array([[14, 13, 12, 11],#           [10,  9,  8,  7],#           [ 6,  5,  4,  3]])print(np.transpose(B))#[[14 10  6]# [13  9  5]# [12  8  4]# [11  7  3]]print(B.T)#[[14 10  6]# [13  9  5]# [12  8  4]# [11  7  3]]

np.sort

对矩阵中的所有值从大到小排序。

#排序函数,sort(),针对每一行进行从小到大排序操作B=np.arange(14,2, -1).reshape((3,4))# B :array([[14, 13, 12, 11],#           [10,  9,  8,  7],#           [ 6,  5,  4,  3]])print(np.sort(B))

# B':array([[11,12,13,14],#           [ 7, 8, 9,10],#           [ 3, 4, 5, 6]])

np.clip

import numpy as np 

A=np.arange(2,14).reshape((3,4))

#clip函数,clip(Array,Array_min,Array_max),Array指的是将要被#执行用的矩阵,而后面的最小值最大值则用于让函数判断矩阵中元素是否有比#最小值小的或者比最大值大的元素,并将这些指定的元素转换为最小值或者最#大值。print(np.clip(A,5,9))

np.argmin

查找矩阵中的最小值的索引值

np.argmax

查找矩阵中的最大值的索引值

import numpy as np 

A=np.arange(2,14).reshape((3,4))#[[ 2  3  4  5]# [ 6  7  8  9]# [10 11 12 13]]#numpy基本运算print(A)#求矩阵中最小元素print('最小值的索引值',np.argmin(A))##最小值的索引值 0#求矩阵中最大元素print('最大值的索引值',np.argmax(A))#最大值的索引值 11

np.mean

求矩阵所有值的均值,亦写成A.mean()

同np.average( )

np.average

import numpy as np 

A=np.arange(2,14).reshape((3,4))

#求矩阵的均值print('矩阵平均值表示之一',np.mean(A),'|',A.mean())#矩阵平均值表示之一 7.5 | 7.5

print('矩阵平均值表示之二',np.average(A))#矩阵平均值表示之二 7.5

np.cumsum

import numpy as np 

A=np.arange(2,14).reshape((3,4))#求矩阵n项累加#eg: array([ [ 2, 3, 4, 5]#            [ 6, 7, 8, 9]        #            [10,11,12,13] ])#     ---print('矩阵前n项累加',np.cumsum(A))

np.diff

import numpy as np 

A=np.arange(2,14).reshape((3,4))#累差运算函数diff,计算的便是每一行中后一项与前一项之差.#eg: array([ [ 2, 3, 4, 5],             array([[1,1,1],#            [ 6, 7, 8, 9],       ---&gt;          [1,1,1],#            [10,11,12,13] ])                   [1,1,1]]) print(np.diff(A))

np.exp

求e的幂次方。

&gt;&gt;&gt; b=np.array([2,4,6])&gt;&gt;&gt; np.exp(b)array([  7.3890561 ,  54.59815003, 403.42879349])

np.sqrt

开方函数

&gt;&gt;&gt; c=np.array([4,9,16])&gt;&gt;&gt; np.sqrt(c)array([2., 3., 4.])

索引、切片和迭代

一维数组

一维的数组可以进行索引、切片和迭代操作。

&gt;&gt;&gt; import numpy as np&gt;&gt;&gt; a=np.arange(10)**3&gt;&gt;&gt; aarray([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729], dtype=int32)&gt;&gt;&gt; a[2]  #获取第二个值8&gt;&gt;&gt; a[2:5] #获取第二到第五个值,以数组形式返回array([ 8, 27, 64], dtype=int32)&gt;&gt;&gt; a[:6:2]=-1000  #修改第零个、第二个、第六个值为-1000&gt;&gt;&gt; aarray([ -1000, 1, -1000, 27, -1000, 125, 216, 343, 512, 729], dtype=int32)&gt;&gt;&gt; a[ : :-1] #倒序aarray([ 729, 512, 343, 216, 125, -1000, 27, -1000, 1, -1000], dtype=int32)&gt;&gt;&gt; for i in a:...     print(i**(1/3.))...nan1.0nan3.0nan5.05.9999999999999996.9999999999999997.9999999999999998.999999999999998

多维数组

多维数组的每一个轴都有一个索引,这些索引以逗号的形式分隔的元组给出:

<<< def f(x,y):...     return 5*x+y...&gt;&gt;&gt; b=np.fromfunction(f,(5,4),dtype=int)&gt;&gt;&gt; barray([[ 0,  1,  2,  3],[ 5,  6,  7,  8],[10, 11, 12, 13],[15, 16, 17, 18],[20, 21, 22, 23]])&gt;&gt;&gt; b[2,3]     #第二行第三列的数字13&gt;&gt;&gt; b[0:5,1] #第0~5行第1列的数字,以数组形式返回array([ 1,  6, 11, 16, 21])&gt;&gt;&gt; b[ : ,1] #第1列的数字,以数组形式返回array([ 1,  6, 11, 16, 21])&gt;&gt;&gt; b[1:3,:] #第1~3行的数字,以数组形式返回array([[ 5,  6,  7,  8],[10, 11, 12, 13]])

对多维数组进行迭代(iterating)是相对于第一个轴完成的。

&gt;&gt;&gt; for row in b:...     print(row)...[0 1 2 3][5 6 7 8][10 11 12 13][15 16 17 18][20 21 22 23]

迭代操作

如果想要对数组中的每个元素执行操作,可以使用flat属性,该属性是数组的所有元素的迭代器[1] :

&gt;&gt;&gt; for element in b.flat:...     print(element)...01235678101112131516171820212223

array形状操作

改变数组的形状

array.ravel()

化成1*n的矩阵。

&gt;&gt;&gt; a=np.floor(10*np.random.random((3,4)))&gt;&gt;&gt; aarray([[9., 8., 7., 4.],[5., 3., 5., 9.],[9., 4., 0., 0.]])&gt;&gt;&gt; a.shape(3, 4)&gt;&gt;&gt; a.ravel()array([9., 8., 7., 4., 5., 3., 5., 9., 9., 4., 0., 0.])&gt;&gt;&gt; a.reshape(-1)array([9., 8., 7., 4., 5., 3., 5., 9., 9., 4., 0., 0.])

Ps: array.ravel()作用等同于array.reshape(-1)

array.T

转置矩阵 。

&gt;&gt;&gt; a.Tarray([[9., 5., 9.],[8., 3., 4.],[7., 5., 0.],[4., 9., 0.]])&gt;&gt;&gt; a.T.shape(4, 3)

array.reshape()

改变为任意形状 。

&gt;&gt;&gt; a = np.arange(6).reshape((3, 2))#将1*6矩阵转为3*2矩阵&gt;&gt;&gt; aarray([[0, 1],[2, 3],[4, 5]])&gt;&gt;&gt; np.reshape(a, (2, 3)) #将3*2矩阵转为2*3矩阵array([[0, 1, 2],[3, 4, 5]])&gt;&gt;&gt; a.reshape(2,-1) #reshape操作中将size指定为-1,则会自动计算其他的size大小:array([[0, 1, 2],[3, 4, 5]])

array.resize( )

该方法会直接修改数组本身的shape和size。

&gt;&gt;&gt; a=np.arange(12).reshape(3,4)&gt;&gt;&gt; aarray([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])&gt;&gt;&gt; a.resize((2,6))&gt;&gt;&gt; aarray([[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11]])

堆叠数组

np.vstack

属于一种上下合并的情况。

import numpy as np#合并ArrayA=np.array([1,1,1])B=np.array([2,2,2])#vstack:属于一种上下合并print(np.vstack((A,B))) #Vertical stack#output:  [[1 1 1]#          [2 2 2]]

np.hstack

属于一种左右合并的情况

import numpy as np

A=np.array([1,1,1])B=np.array([2,2,2])

D=np.hstack((A,B))print(D)#[1 1 1 2 2 2]E=np.hstack((B,A))print(E)#[2 2 2 1 1 1]

np.concatenate

#针对多个矩阵或序列进行合并操作,借助# np.concatenate((A,A,A,...),axis=0 或 1)&gt;&gt;&gt; a = np.array([[1, 2], [3, 4]])&gt;&gt;&gt;a&gt;&gt;&gt;array([[1, 2],[3, 4]])&gt;&gt;&gt; b = np.array([[5, 6]])&gt;&gt;&gt; barray([[5, 6]])&gt;&gt;&gt; np.concatenate((a, b), axis=0)#合并列array([[1, 2],[3, 4],[5, 6]])&gt;&gt;&gt; np.concatenate((a, b.T), axis=1) #合并行array([[1, 2, 5],[3, 4, 6]])&gt;&gt;&gt; np.concatenate((a, b), axis=None)array([1, 2, 3, 4, 5, 6])

分割数组

numpy.split

import numpy as npA=np.arange(12).reshape((3,4))print(A)

#分割函数np.split(array,number of split row/column,axis= 0 or 1)print(np.split(A,2,axis=1))#把四列分成2块(2列一块)# [array([ [0, 1],#          [4, 5],#          [8, 9]]), array([[ 2,  3],#                           [ 6,  7],#                           [10, 11]])]#axis=0,表示按行分割;axis=1,表示按列分割print(np.split(A,3,axis=0))  #把三行按行分成3块(一行一块)#[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[   8,  9, 10, 11]])]

np.hsplit

按列拆开数组。

&gt;&gt;&gt; x = np.arange(16.0).reshape(4, 4)&gt;&gt;&gt; xarray([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.]])&gt;&gt;&gt; np.hsplit(x, 2)[array([[ 0.,  1.],[ 4.,  5.],[ 8.,  9.],[12., 13.]]), array([[ 2.,  3.],[ 6.,  7.],[10., 11.],[14., 15.]])]

np.vsplit

按行拆开数组。

&gt;&gt;&gt; x = np.arange(16.0).reshape(4, 4)&gt;&gt;&gt; xarray([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.]])

&gt;&gt;&gt; np.vsplit(x, 2)[array([[0., 1., 2., 3.],[4., 5., 6., 7.]]), array([[ 8.,  9., 10., 11.],[12., 13., 14., 15.]])]

np.array_split

将一个数组拆分为大小相等或近似相等的多个子数组。如果无法进行均等划分,则不会引发异常。

&gt;&gt;&gt; x = np.arange(8.0)&gt;&gt;&gt; np.array_split(x, 3)[array([0., 1., 2.]), array([3., 4., 5.]), array([6., 7.])]

拷贝和深拷贝

当计算和操作数组时,有时会将数据复制到新数组中,有时则不会 。

存在以下3种情况:

完全不复制

简单分配不会复制数组对象或其数据。

import numpy as np

a=np.arange(4)# =的赋值方式会带有关联性b=ac=ad=b#改变a的第一个值,b、c、d的第一个值也会同时改变。

浅拷贝

不同的数组对象可以共享相同的数据。view方法创建一个查看相同数据的新数组对象。

&gt;&gt;&gt; import numpy as np&gt;&gt;&gt; a=np.arange(12).reshape(3,4)&gt;&gt;&gt; aarray([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])&gt;&gt;&gt; c=a.view()&gt;&gt;&gt; c is aFalse&gt;&gt;&gt; c.base is aFalse&gt;&gt;&gt; carray([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])&gt;&gt;&gt; c.shape = 2,6&gt;&gt;&gt; carray([[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11]])&gt;&gt;&gt; a.shape(3, 4)&gt;&gt;&gt; c[0,4] = 1234&gt;&gt;&gt; aarray([[   0,    1,    2,    3],[1234,    5,    6,    7],[   8,    9,   10,   11]])&gt;&gt;&gt; carray([[   0,    1,    2,    3, 1234,    5],[   6,    7,    8,    9,   10,   11]])

深拷贝copy()

copy方法生成数组及其数据的完整副本。

import numpy as np

a=np.arange(4)#copy()的赋值方式没有关联性b=a.copy()print(b)a[3]=45print('a:',a)#a: [11  1  2 45]print('b:',b)#b: [11  1  2  3]

@all right save,ZhangGehang.

References

[1] 迭代器: https://docs.python.org/tutorial/classes.html#iterators

numpy 点乘_Numpy入门指南相关推荐

  1. numpy 平方_NumPy入门指南

    本文介绍了NumPy的基础知识,NumPy是使用Python进行科学计算的软件包. 我们将在此处介绍几类基本的数组操作: · 创建NumPy数组 · 重塑数组 · NumPy的数学运算 · 数组的索引 ...

  2. 改变numpy的大小_Numpy入门详细教程

    序言:python数据科学基础库主要是三剑客:numpy,pandas以及matplotlib,每个库都集成了大量的方法接口,配合使用功能强大.平时虽然一直在用,也看过很多教程,但纸上得来终觉浅,还是 ...

  3. 【AI参赛经验】深度学习入门指南:从零开始TinyMind汉字书法识别——by:Link

    各位人工智能爱好者,大家好! 由TinyMind发起的#第一届汉字书法识别挑战赛#正在火热进行中,比赛才开始3周,已有数只黑马冲进榜单.目前TOP54全部为90分以上!可谓竞争激烈,高手如林.不是比赛 ...

  4. 一份为高中生准备的机器学习与人工智能入门指南

    翻译 | AI科技大本营 参与 | 林椿眄 作为一名高中生,我在过去的一年里自学了机器学习与人工智能的相关课程,在这里和大家分享下我自己的学习心得,希望能够对那些机器学习或人工智能初学者有所帮助,这也 ...

  5. BERT模型超酷炫,上手又太难?请查收这份BERT快速入门指南!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自 | GitHub    作者 | Jay Alammar 转自 | 机器之心 如 ...

  6. BERT模型超酷炫,上手又太难?请查收这份BERT快速入门指南

    2019-12-31 10:50:59 选自GitHub 作者:Jay Alammar 参与:王子嘉.Geek AI 如果你是一名自然语言处理从业者,那你一定听说过最近大火的 BERT 模型.本文是一 ...

  7. h5py快速入门指南

    h5py是Python语言用来操作HDF5的模块.下面的文章主要介绍h5py的快速入门指南,翻译自h5py的官方文档:http://docs.h5py.org/en/lates... .该翻译仅为个人 ...

  8. 【51单片机快速入门指南】4.4.1:python串口接收磁力计数据并进行最小二乘法椭球拟合

    目录 硬知识 Python代码 使用方法 串口收集数据 椭球拟合 验证 STC15F2K60S2 16.384MHz Keil uVision V5.29.0.0 PK51 Prof.Develope ...

  9. 深度学习入门指南:从零开始TinyMind汉字书法识别

    深度学习入门指南:从零开始TinyMind汉字书法识别 这几天在刷这个新出的比赛,受举办方邀请谢了一篇文章,也转到CSDN来和大家分享下吧.话说TinyMind不是被CSDN收购了么,我这算不算把统一 ...

最新文章

  1. 温州大学计算机与人工智能学院2022年硕士研究生招生复试咨询开始啦!
  2. leetcode 242. 有效的字母异位词(Java版)
  3. nzhtl1477-ただいま帰りました ( bfs )
  4. 如何看待 70% 的程序员,缺乏数据结构和算法知识?
  5. C++学习之Dev-C++安装与调试
  6. 比较一下以“反射”和“表达式”执行方法的性能差异【转】
  7. origin游戏服务器引擎
  8. Oracle 11g R2 软件下载网址收藏
  9. 彻底的卸载SQL Server2005?
  10. Nmap发现局域网中存活主机
  11. box-sizing 的使用
  12. windows10电脑连接小爱音箱(完美解决连接上无声音)
  13. matlab马赫带,学习实现马赫带效果
  14. job每分钟执行 oracle_oracle的job怎么设置一个过程每5分钟执行一次
  15. 大海为什么是蓝色的?
  16. 当你在进行SDK安装更新时,遇到了一些不能安装的项目时,你可以酱紫····
  17. DDR中的ODT功能详解及波形对比
  18. android帧动画tulian,Flash小游项目任务书.doc
  19. navicat 快捷键使用
  20. DUL Oracle Data Unloader工具下载

热门文章

  1. qzone.class.php,PHP实现QQ空间自动回复说说的方法
  2. java data使用_@Data注解详解及使用方法-Fun言
  3. c语言如何持续输入字符直到指定字符结束_《小白学C》第三章 常用输入输出函数...
  4. padans的DataFrame
  5. C++ 继承过程中使用访问说明符和虚函数
  6. 【建站系列教程】2、数据源
  7. LeetCode 547. Friend Circles--Python解法--笔试算法题
  8. 报错解决:cp: error while loading shared libraries: libc.so.6: cannot open shared object file: No such fi
  9. linux 同步方法剖析,Linux 同步方法剖析
  10. linux查看全连接队列大小,[TimLinux] TCP全连接队列满