NumPy 简单应用

Python中元组(Tuple)由一系列元素组成,元素能够是不一样的数据类型,且元组是“写保护”的,建立后不能再修改。
Python中列表(list)的元素能够是任何对象,列表中所保存的是对象的指针。这样保存[1,2,3],须要有3个指针和三个整数对象。对于数值运算来讲这种结构比较浪费内存和CPU计算时间。
Python还提供了一个array模块,array对象和列表不一样,它直接保存数值,和C语言的一维数组比较相似,不支持多维,也没有各类运算函数,不适合作数值运算。
NumPy弥补了这些不足,它提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(下文统一称之为数组)是存储单一数据类型的多维数组,而ufunc则是可以对数组进行处理的函数。html

1 ndarray对象

属性

>>> 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
array([6, 7, 8])
>>> type(b)
<type 'numpy.ndarray'>

建立ndarray的函数

这里写图片描述
python

In [27]: arr1 = np.array([1, 2, 3], dtype=np.float64)

注:web

def asarray(a, dtype=None, order=None):
    return array(a, dtype, copy=False, order=order)

因此 aasarray只在必要时copy.array 默认copy一个对象,而 asarray只在必要时copy.算法

索引

  • 一系列地址表示索引
>>> a=np.array([0,0,0])
>>> index=np.array([0,1,2,1])
>>> a[index]=3
>>> a
array([3, 3, 3])
>>> np.reshape(a[index],(2,2))
array([[3, 3], [3, 3]])

统计

输出numpy.array中出现频率最高的元素数组

>>> a = np.array([1,0,3,0,2,1,0,0,3,2,2,0])
>>> counts=np.bincount(a)
>>> np.argmax(counts)
0

修改

插入dom

weights = np.insert(weights, 0, 0, axis = 0)#在0行插入一行0
weights = np.insert(weights, 0, 0, axis = 1)#在0列插入一列0

若是元素类型不一致时,不会报错,发生自动类型转换!svg

>>> d=np.array([ 1.2 ,  1.34,  2.9  ])
>>> cc
array([[1, 1, 1], [4, 4, 4], [0, 0, 0], [1, 1, 1], [2, 2, 2]])
>>> cc[0]=d
>>> cc
array([[1, 1, 2], [4, 4, 4], [0, 0, 0], [1, 1, 1], [2, 2, 2]])

运算

表示元素乘函数

>>> a*b
array([[ 5, 12], [21, 32]])

dot()表示矩阵乘ui

>>> np.dot(a,b)
array([[19, 22], [43, 50]])

内嵌函数

random
从分布 N(μ,σ2) 中采样生成 mn 的矩阵lua

sigma * np.random.randn(m,n) + mu

建立一个Mersenne Twister随机数生成器,Mersenne Twister是生成伪随机数的算法

>>> import numpy
rng = numpy.random.RandomState(123)#123表示伪随机数生成器的种子,相同的种子生成相同的随机数序列
>>> rng.uniform()#按均匀分布从随机序列中采样
0.6964691855978616
>>> s = numpy.random.binomial(1, 0.5, (2,3))#按二项分布采样,成功的几率为0.5,输出样本组成2*3的数组
>>> s
array([[1, 0, 0], [0, 0, 0]])

2 文件操做

读写

移动的指针

>>> import numpy as np
>>> a = np.arange(0,12)
>>> a.reshape(3,4)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> a.tofile("a.bin")
>>> fin=open("a.bin",'rb')
>>> c = np.fromfile(fin, dtype=np.int64,count=3)
>>> c
array([0, 1, 2])
>>> d = np.fromfile(fin, dtype=np.int64,count=2)
>>> d
array([3, 4])
>>> d = np.fromfile(fin, dtype=np.int64,count=2)
>>> d
array([5, 6])

文件指针fin指向每次读操做结束后的位置。

numpy

NumPy提供了多种函数,方便从文件中存取数组。文件存取格式分为二进制、文本两种,二进制格式又分为有格式和无格式。
二进制有格式
numpy.save(保存单个数组),numpy.savez(保存数组,生成 .plz的压缩文件) numpy.load
二进制无格式
numpy.tofile、numpy.fromfile
文本格式
numpy.savetxt, numpy.loadtxt

参考

1.http://old.sebug.net/paper/books/scipydoc/numpy_intro.html#id9
2.https://www.safaribooksonline.com/library/view/python-for-data/9781449323592/ch04.html