NumPy 数组类型介绍

来源:互联网 发布:朝鲜知乎 编辑:程序博客网 时间:2024/06/17 18:14

原文地址:http://blog.csdn.net/lsjseu/article/details/20359201

在原文基础上适当精简并更正少量原作者的笔误:

1. NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(通常是元素是数字)。

NumPy的数组类被称为ndarray。通常被称作数组。注意numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能。更多重要ndarray对象属性有:

>>> from numpy  import *>>> a =arange(15).reshape(3, 5)>>> aarray([[ 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'int32'>>> a.itemsize # 数组中每个元素的字节大小4>>> a.size # 数组中元素总数15>>> type(a)numpy.ndarray>>> b = array([6,7, 8])>>> barray([6, 7, 8])>>> type(b)numpy.ndarray

2. 创建数组:

a)  可以使用 array 函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来:

>>> from numpy  import *>>> a = array([2,3,4] )>>> aarray([2, 3, 4])>>> a.dtypedtype('int32')>>> b = array([1.2,3.5, 5.1])>>> b.dtypedtype('float64') 

一个常见的错误包括用多个数值参数调用array而不是提供一个由数值组成的列表作为一个参数

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

b)  数组将序列包含序列转化成二维的数组,序列包含序列包含序列转化成三维数组等等:

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

c)  数组类型可以在创建时显示指定:

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

d)  通常,数组的元素开始都是未知的,但是它的大小已知。因此,NumPy提供了一些使用占位符创建数组的函数。这最小化了扩展数组的需要和高昂的运算代价。

>>> zeros( (3,4) )array([[0.,  0., 0.,  0.],       [0., 0.,  0.,  0.],       [0., 0.,  0.,  0.]])>>> ones((2,3,4), dtype=int16 )                # dtype can also bespecifiedarray([[[ 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)>>> empty( (2,3) )array([[  3.73603959e-262,   6.02658058e-154,   6.55490914e-260],       [ 5.30498948e-313,  3.14673309e-307,  1.00000000e+000]])

e)  函数zeros创建一个全是0的数组,函数 ones 创建一个全1的数组,函数 empty创建一个内容随机并且依赖与内存状态的数组。默认创建的数组类型(dtype)都是float64。

f)  为了创建一个数列,NumPy提供一个类似arange的函数返回数组而不是列表:

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

g)  当 arange 使用浮点数参数时,由于有限的浮点数精度,通常无法预测获得的元素个数。因此,最好使用函数linspace去接收我们想要的元素个数来代替用range来指定步长。

h)  数组操作更多实例

i)  打印数组:

当你打印一个数组,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 1011]]>>> c =arange(24).reshape(2,3,4)        # 3d array>>>print c[[[ 0  1 2  3]  [4  5 6  7]  [8  9 10 11]]    [[12 1314 15]  [16 1718 19]  [20 2122 23]]]

一维数组被打印成行,二维数组成矩阵,三维数组成矩阵列表。

强制打印整个数组,你可以设置printoptions参数来更改打印选项。

>>>set_printoptions(threshold='nan')

0 0