python基础之Numpy库中array用法总结

目录
  • 前言
  • 为什么要用numpy
  • 数组的创建
    • 生成均匀分布的array:
    • 生成特殊数组
  • 获取数组的属性
  • 数组索引,切片,赋值
    • 数组操作
    • 输出数组
  • 总结

前言

Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。

NumPy数组是一个多维数组对象,称为ndarray。数组的下标从0开始,同一个NumPy数组中所有元素的类型必须是相同的。

>>> import numpy as np

为什么要用numpy

Python中提供了list容器,可以当作数组使用。但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3]。就需要三个指针和三个整数对象。对于数值运算来说,这种结构显然不够高效。

Python虽然也提供了array模块,但其只支持一维数组,不支持多维数组(在TensorFlow里面偏向于矩阵理解),也没有各种运算函数。因而不适合数值运算。

NumPy的出现弥补了这些不足。

数组的创建

使用numpy.array方法将tuple和list, array, 或者其他的序列模式的数据转创建为 ndarray, 默认创建一个新的 ndarray.

>>> np.array([1,2,3,4])
[1 2 3 4]

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

>>> c = array( [ [1,2], [3,4] ], dtype=complex)
#指定数组中元素的类型
>>> c
    array([[ 1.+0.j,  2.+0.j],
       [ 3.+0.j,  4.+0.j]]) 

生成均匀分布的array:

arange(最小值,最大值,步长)(左闭右开) : 创建等差数列

linspace(最小值,最大值,元素数量)

logspace(开始值, 终值, 元素个数): 创建等比数列

>>> np.arange(15)
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]

>>> np.arange(15).reshape(3,5)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]

>>> np.arange( 0, 2, 0.3 )
array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])

>>> np.linspace(1,3,9)
[ 1.    1.25  1.5   1.75  2.    2.25  2.5   2.75  3.  ]

生成特殊数组

np.ones: 创建一个数组, 其中的元素全为 1

np.zeros: 创建元素全为 0 的数组, 类似 np.ones

np.empty创建一个内容随机并且依赖与内存状态的数组。

np.eye: 创建一个对角线为 1 其他为 0 的矩阵.

np.identity: 创建一个主对角线为 1 其他为 0 的方阵.

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

>>> np.ones((3,4))
[[ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]]

>>> np.eye(3)
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]

获取数组的属性

>>> a = np.zeros((2,2,2))
>>> a.ndim   #数组的维数
3
>>> a.shape  #数组每一维的大小
(2, 2, 2)
>>> a.size   #数组全部元素的数量
8
>>> a.dtype  #数组中元素的类型
float64
>>> print a.itemsize  #每个元素所占的字节数
8

数组索引,切片,赋值

‘…'符号表示将所有未指定索引的维度均赋为 ‘:'

‘:'在python中表示该维所有元素

>>> a = np.array( [[2,3,4],[5,6,7]] )
>>> a
[[2 3 4]
 [5 6 7]]
>>> a[1,2]
7
>>> a[1,:]
[5 6 7]
>>> print a[1,1:2]
[6]
>>> a[1,:] = [8,9,10]
>>> a
[[ 2  3  4]
 [ 8  9 10]]
>>> c[1,...]                                   # same as c[1,:,:] or c[1]
array([[100, 101, 102],
       [110, 112, 113]])
>>> c[...,2]                                   # same as c[:,:,2]
array([[  2,  13],
       [102, 113]])
>>> 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]]) 

数组操作

>>> a = np.ones((2,2))
>>> b = np.eye(2)
>>> print a
[[ 1.  1.]
 [ 1.  1.]]
>>> print b
[[ 1.  0.]
 [ 0.  1.]]
>>> print a > 2
[[False False]
 [False False]]
>>> print a+b             #数组加,对应位置相加
[[ 2.  1.]
 [ 1.  2.]]
>>> print a-b             #数组减,对应位置相减
[[ 0.  1.]
 [ 1.  0.]]
>>> print b*2             #数组与数值相乘,对应位置乘
[[ 2.  0.]
 [ 0.  2.]]
>>> print (a*2)*(b*2)     #数组与数组相乘,按位置一对一相乘
[[ 4.  0.]
 [ 0.  4.]]
>>> print b/(a*2)          #数组与数组相除,按位置一对一相除
[[ 0.5  0. ]
 [ 0.   0.5]]
>>> print a.dot(b)                    # matrix product,矩阵乘
>>> np.dot(a,a)                       #矩阵乘法
array([[ 2.,  2.],
       [ 2.,  2.]])
>>> print (a*2)**4
[[ 16.  16.]
 [ 16.  16.]]
>>> b = a              #浅拷贝
>>> b is a
True
>>> c = a.copy()       #深拷贝
>>> c is a
False

内置函数(min,max,sum),同时可以使用axis指定对哪一维进行操作:

 >>> a.sum()
4.0
>>> a.sum(axis=0)    #计算每一列(二维数组中类似于矩阵的列)的和
array([ 2.,  2.])
>>> a.min()          #数组最小值
1.0
>>> a.max()          #数组最大值
1.0

使用numpy下的方法:

>>> np.sin(a)
array([[ 0.84147098,  0.84147098],
       [ 0.84147098,  0.84147098]])
>>> np.max(a)
1.0
>>> np.floor(a)
array([[ 1.,  1.],
       [ 1.,  1.]])
>>> np.exp(a)               #e^x
array([[ 2.71828183,  2.71828183],
       [ 2.71828183,  2.71828183]])
>>> print np.vstack((a,b))   #合并数组
[[ 1.  1.]
 [ 1.  1.]
 [ 1.  0.]
 [ 0.  1.]]
>>> print np.hstack((a,b))   #合并数组
[[ 1.  1.  1.  0.]
 [ 1.  1.  0.  1.]]
>>> print a.transpose()       #转置

numpy.linalg模块中有很多关于矩阵运算的方法:

>>> import numpy.linalg as nplg

NumPy中的基本数据类型

名称 描述
bool 用一个字节存储的布尔类型(True或False)
inti 由所在平台决定其大小的整数(一般为int32或int64)
int8/16/32/64 整数,1/2/4/8个字节大小
uint8/16/32/64 无符号整数
float16/32/64 半/单/双精度浮点数,16/32/64位,指数、精度也不同
complex64/128 复数,分别用两个32/64位浮点数表示实部和虚部

输出数组

当输出一个数组时,NumPy以特定的布局用类似嵌套列表的形式显示:

  • 第一行从左到右输出
  • 每个切片通过一个空行与下一个隔开
  • 一维数组被打印成行,二维数组成矩阵,三维数组成矩阵列表。
  • 如果一个数组太长,则NumPy自动省略中间部分而只打印两端的数据: 
>>> a = arange(6)                         # 1d array
>>> print a
    [0 1 2 3 4 5]
   
>>> b = arange(12).reshape(4,3)           # 2d array
>>> print b
    [[ 0  1  2]
    [ 3  4  5]
    [ 6  7  8]
    [ 9 10 11]]   
>>> c = 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]]]  

总结

到此这篇关于python基础之Numpy库中array用法的文章就介绍到这了,更多相关python Numpy中array用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python numpy.array()生成相同元素数组的示例

    如下所示: new_array = np.zeros((5,4)) for i in range(3): new_array[i] = np.array([0.25]*4) 运行结果: >>> new_array array([[0.25, 0.25, 0.25, 0.25], [0.25, 0.25, 0.25, 0.25], [0.25, 0.25, 0.25, 0.25], [0. , 0. , 0. , 0. ], [0. , 0. , 0. , 0. ]]) 以上这篇Pytho

  • python中利用numpy.array()实现俩个数值列表的对应相加方法

    小编想把用python将列表[1,1,1,1,1,1,1,1,1,1] 和 列表 [2,2,2,2,2,2,2,2,2,2]对应相加成[3,3,3,3,3,3,3,3,3,3]. 代码如下: import numpy a = numpy.array([1,1,1,1,1,1,1,1,1,1]) b = numpy.array([2,2,2,2,2,2,2,2,2,2]) c = a + b print(type(c)) print(list(c)) 输出结果为: <class 'numpy.nd

  • Python中的二维数组实例(list与numpy.array)

    关于python中的二维数组,主要有list和numpy.array两种. 好吧,其实还有matrices,但它必须是2维的,而numpy arrays (ndarrays) 可以是多维的. 我们主要讨论list和numpy.array的区别: 我们可以通过以下的代码看出二者的区别 >>import numpy as np >>a=[[1,2,3],[4,5,6],[7,8,9]] >>a [[1,2,3],[4,5,6],[7,8,9]] >>type(a

  • 基于Python Numpy的数组array和矩阵matrix详解

    NumPy的主要对象是同种元素的多维数组.这是一个所有的元素都是一种类型.通过一个正整数元组索引的元素表格(通常是元素是数字). 在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank,但是和线性代数中的秩不是一样的,在用python求线代中的秩中,我们用numpy包中的linalg.matrix_rank方法计算矩阵的秩,例子如下). 结果是: 线性代数中秩的定义:设在矩阵A中有一个不等于0的r阶子式D,且所有r+1阶子式(如果存在的话)全等于0,那末D称为矩阵

  • Python中Numpy ndarray的使用详解

    本文主讲Python中Numpy数组的类型.全0全1数组的生成.随机数组.数组操作.矩阵的简单运算.矩阵的数学运算. 尽管可以用python中list嵌套来模拟矩阵,但使用Numpy库更方便. 定义数组 >>> import numpy as np >>> m = np.array([[1,2,3], [2,3,4]]) #定义矩阵,int64 >>> m array([[1, 2, 3], [2, 3, 4]]) >>> m = n

  • python中找出numpy array数组的最值及其索引方法

    在list列表中,max(list)可以得到list的最大值,list.index(max(list))可以得到最大值对应的索引 但在numpy中的array没有index方法,取而代之的是where,其又是list没有的 首先我们可以得到array在全局和每行每列的最大值(最小值同理) >>> a = np.arange(9).reshape((3,3)) >>> a array([[0, 1, 2], [9, 4, 5], [6, 7, 8]]) >>&

  • Python 获取numpy.array索引值的实例

    举个例子: q=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] 我想获取其中值等于7的那个值的下标,以便于用于其他计算. 如果使用np.where,如: q=np.arange(0,16,1) g=np.where(q==7) print q print g 运行结果是: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] (array([7]),) 显然(array([7]),)中的数字7我是没法提取出来做运算的,这是一个tuple

  • 对python numpy.array插入一行或一列的方法详解

    如下所示: import numpy as np a = np.array([[1,2,3],[4,5,6],[7,8,9]]) b = np.array([[0,0,0]]) c = np.insert(a, 0, values=b, axis=0) d = np.insert(a, 0, values=b, axis=1) print(c) print(d) >>c [[0 0 0] [1 2 3] [4 5 6] [7 8 9]] >>d [[0 1 2 3] [0 4 5

  • Python 实现Numpy中找出array中最大值所对应的行和列

    Python特别灵活,肯定方法不止一种,这里介绍一种我觉得比较简单的方法. 如下图,使用x == np.max(x) 获得一个掩模矩阵,然后使用where方法即可返回最大值对应的行和列. where返回一个长度为2的元组,第一个元素保存的是行号,第二个元素保存的是列号. 以上这篇Python 实现Numpy中找出array中最大值所对应的行和列就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • python实现list由于numpy array的转换

    实例如下所示: u = array([[1,2],[3,4]]) m = u.tolist() #转换为list m.remove(m[0]) #移除m[0] m = np.array(m) #转换为arra 以上这篇python实现list由于numpy array的转换就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴趣的文章: Python中列表list以及list与数组array的相互转换实现方法 python 中的list和array的不同之处及

随机推荐