原文地址: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)
>>> 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
'int32'
>>> a.itemsize # 数组中每个元素的字节大小
4
>>> a.size # 数组中元素总数
15
>>> type(a)
numpy.ndarray
>>> b = array([6,7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
numpy.ndarray
2. 创建数组:
a) 可以使用 array 函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来:
>>> from numpy import *
>>> a = array([2,3,4] )
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int32')
>>> b = array([1.2,3.5, 5.1])
>>> b.dtype
dtype('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) ] )
>>> b
array([[ 1.5, 2. , 3. ],
[ 4. , 5. , 6. ]])
c) 数组类型可以在创建时显示指定:
>>> c = array( [[1,2], [3,4] ], dtype=complex )
>>> c
array([[ 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 bespecified
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)
>>> 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 arguments
array([ 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')