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则是能够对数组进行处理的函数。
>>> 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'>
In [27]: arr1 = np.array([1, 2, 3], dtype=np.float64)
注:
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
插入
weights = np.insert(weights, 0, 0, axis = 0)#在0行插入一行0
weights = np.insert(weights, 0, 0, axis = 1)#在0列插入一列0
如果元素类型不一致时,不会报错,发生自动类型转换!
>>> 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()表示矩阵乘
>>> np.dot(a,b)
array([[19, 22],
[43, 50]])
random
从分布 N(μ,σ2) 中采样生成 m∗n 的矩阵
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]])
读移动的指针
>>> 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.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