1.np属性事例
>>> import numpy as np
>>> 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.dtype
dtype('int64')
>>> a.size
15
>>> a.itemsize
8
>>> type(a)
>>>
>>> b = np.array([1,2,3,4,5,6,7,8,9])
>>> b
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> c = np.array([1,2,3,4,5,6,'7','a','b'])
>>> c
array(['1', '2', '3', '4', '5', '6', '7', 'a', 'b'], dtype='>> type(b)
>>> type(c)
>>> c.dtype
dtype('>> b.dtype
dtype('int64')
>>> c.itemsize
84
>>> b.itemsize
8
2.创建
numpy.array
它从任何暴露数组接口的对象,或从返回数组的任何方法创建一个ndarray。
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
示例 1
import numpy as np
a = np.array([1,2,3])
示例 2
import numpy as np
a = np.array([[1, 2], [3, 4]])
示例 3
# 最小维度
import numpy as np
a = np.array([1, 2, 3,4,5], ndmin = 2)
print a
示例 4
# dtype 参数
import numpy as np
a = np.array([1, 2, 3], dtype = complex)
print a
输出如下:
[ 1.+0.j, 2.+0.j, 3.+0.j]
注:传入的参数必须是同一结构,不是同一结构将发生转换。
>>> import numpy as np
>>> a = np.array([1,2,3.5])
>>> a
array([1. , 2. , 3.5])
>>> b = np.array([1,2,3])
>>> b
array([1, 2, 3])
>>> c = np.array(['1',2,3])
>>> c
array(['1', '2', '3'], dtype='>>
array还可以将序列的序列转换成二位数组,可以将序列的序列的序列转换成三维数组,以此类推。
>>> import numpy as np
>>> a = np.array([[1,2,3],[2,3,4]])
>>> a
array([[1, 2, 3],
[2, 3, 4]])
>>> b = np.array([[1,2,3],[2,3,4],[3,4,5]])
>>> b
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5]])
>>>
3.数组操作
在NumPy中,*用于数组间元素对应的乘法,而不是矩阵乘法,矩阵乘法可以用dot()方法来实现。
>>> A = np.array([[1,2],[3,4]])
>>> B = np.array([[0,1],[0,1]])
>>> A
array([[1, 2],
[3, 4]])
>>> B
array([[0, 1],
[0, 1]])
>>> A*B # elementwise product
array([[0, 2],
[0, 4]])
>>> A.dot(B) # matrix product
array([[0, 3],
[0, 7]])
>>> np.dot(A,B) # another matrix product
array([[0, 3],
[0, 7]])
当操作不同类型的数组时,最终的结果数组的类型取决于精度最宽的数组的类型。(即所谓的向上造型)
>>> a = np.ones(3, dtype=np.int32)
>>> b = np.linspace(0,pi,3)
>>> b.dtype.name
'float64'
>>> c = a+b
>>> c
array([ 1. , 2.57079633, 4.14159265])
>>> c.dtype.name
'float64'
>>> d = np.exp(c*1j)
>>> d
array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,
-0.54030231-0.84147098j])
>>> d.dtype.name
'complex128'
ndarray类实现了许多操作数组的一元方法,如求和、求最大值、求最小值等。
>>> a = np.random.random((2,3))
>>> a
array([[0.62181697, 0.26165654, 0.34994938],
[0.95619296, 0.24614291, 0.42120462]])
>>> a.sum()
2.8569633678947346
>>> a.min()
0.24614290611891454
>>> a.max()
0.9561929625193091
>>>
除了上述一元方法以外,NumPy还提供了操作数组中特定行和列的一元方法,通过制定不同的axis来实现。
>>> b = np.arange(12).reshape(3,4)
>>> b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> b.sum(axis = 0) # sum of each column
array([12, 15, 18, 21])
>>> b.sum(axis = 1) # sum of each row
array([ 6, 22, 38])
>>> b.min(axis = 0) # min of each column
array([0, 1, 2, 3])
>>> b.min(axis = 1) # min of each row
array([0, 4, 8])
>>> b.max(axis = 0) # max of each column
array([ 8, 9, 10, 11])
>>> b.max(axis = 1) # max of each row
array([ 3, 7, 11])
>>> b.cumsum(axis = 1) # cumulative sum along each row
array([[ 0, 1, 3, 6],
[ 4, 9, 15, 22],
[ 8, 17, 27, 38]])
>>> b.cumsum(axis = 0) # cumulative sum along each column
array([[ 0, 1, 2, 3],
[ 4, 6, 8, 10],
[12, 15, 18, 21]])
>>>
3.数组索引和迭代
与Python中定义的list一样,NumPy支持一维数组的索引、切片和迭代。
a = np.arange(20).reshape(4,5)
print (a)
print
print (a[:,[1,3]])
输出结果
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
the 2nd and 4th column of a:
[[ 1 3]
[ 6 8]
[11 13]
[16 18]]
>>> a = np.arange(10)**3
>>> a
array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729])
>>> a[3]
27
>>> a[2:5]
array([ 8, 27, 64])
>>> a[:6:2] = -1111
>>> a
array([-1111, 1, -1111, 27, -1111, 125, 216, 343, 512,
729])
>>> a[::-1]
array([ 729, 512, 343, 216, 125, -1111, 27, -1111, 1,
-1111])
多维数组与一维数组相似,其在每个轴上都有一个对应的索引(index),这些索引是在一个逗号分隔的元组(tuple)中给出的。
>>> b = np.arange(15).reshape(3,5)
>>> b
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> b[2,3]
13
>>> b[3,3]
Traceback (most recent call last):
File "", line 1, in
IndexError: index 3 is out of bounds for axis 0 with size 3
>>> b[0,0]
0
>>> b[0,4]
4
>>>
>>>
>>> b[:, 1]
array([ 1, 6, 11])
>>> b[1, :]
array([5, 6, 7, 8, 9])
>>> b[-1]
array([10, 11, 12, 13, 14])
>>> b.shape
(3, 5)
这里需要注意的是,数组的第一个索引是从0开始的。一维数组和多维数组的迭代,可以参考如下示例:
>>> for row in b:
... print(row)
...
[0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]
>>> for element in b.flat:
... print(element)
...
0
1
2
3
10
11
12
13
20
21
22
23
30
31
32
33
40
41
42
43
其中flat属性是array中的每个元素的迭代器。
4. 数组堆叠和切片
NumPy支持将多个数据按照不同的轴进行堆叠:
>>> a = np.floor(10*np.random.random((2,2)))
>>> a
array([[0., 8.],
[4., 8.]])
>>> b = np.floor(10*np.random.random((2,2)))
>>> b
array([[1., 4.],
[4., 1.]])
>>> np.vstack((a,b))
array([[0., 8.],
[4., 8.],
[1., 4.],
[4., 1.]])
>>> np.hstack((a,b))
array([[0., 8., 1., 4.],
[4., 8., 4., 1.]])
floor()向下取整,hstack()实现数组横向堆叠,vstack()实现数组纵向堆叠。
5.矩阵运算
Numpy同时提供了矩阵对象(matrix)。矩阵对象和数组的差别:1)矩阵是二维的,而数组是任意正整数维的;2)矩阵的*是矩阵乘法,左侧矩阵的列和右侧的行要想等。数组可通过asmatrix或mat转换为矩阵。
a=np.arange(20).reshape(4,5)
a=np.asmatrix(a)
b=np.matrix('1.0 2.0;3.0 4.0')
6.矩阵赋值
b=a矩阵赋值是将b指到a对应数据的内存地址上,a的值改变b也跟着变。想要真的复制用copy
b=a.copy()
7.矩阵操作
1.矩阵转置
#方法1
a=np.transpose(a)
#方法2
b.T
2.矩阵求逆
ia = nlg.inv(a)
3.求特征值和特征向量