最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易,实际上很优雅地用python还是蛮难的。目前为止,觉得就算法仿真研究而言,还是matlab用得特别舒服,可能是比较熟悉的缘故吧。matlab直接集成了很多算法工具箱,函数查询、调用、变量查询等非常方便,或许以后用久了python也会感觉很好用。与python相比,最喜欢的莫过于可以直接选中某段代码执行了,操作方便,python也可以实现,就是感觉不是很方便。

言归正传,做算法要用到很多的向量和矩阵运算操作,这些嘛在matlab里面已经很熟悉了,但用python的时候需要用一个查一个,挺烦的,所以在此稍作总结,后续使用过程中会根据使用体验更新。

python的矩阵运算主要依赖numpy包,scipy包以numpy为基础,大大扩展了后者的运算能力。

2. 创建一般的多维数组 

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import numpy as np

a = np.array([1,2,3], dtype=int)  # 创建1*3维数组   array([1,2,3])

type(a)  # numpy.ndarray类型

a.shape  # 维数信息(3L,)

a.dtype.name   # 'int32'

a.size   # 元素个数:3

a.itemsize  #每个元素所占用的字节数目:4

b=np.array([[1,2,3],[4,5,6]],dtype=int)  # 创建2*3维数组  array([[1,2,3],[4,5,6]])

b.shape  # 维数信息(2L,3L)

b.size   # 元素个数:6

b.itemsize   # 每个元素所占用的字节数目:4

c=np.array([[1,2,3],[4,5,6]],dtype='int16')  # 创建2*3维数组  array([[1,2,3],[4,5,6]],dtype=int16)

c.shape  # 维数信息(2L,3L)

c.size   # 元素个数:6

c.itemsize   # 每个元素所占用的字节数目:2

c.ndim  # 维数

d=np.array([[1,2,3],[4,5,6]],dtype=complex)    #  复数二维数组

d.itemsize  # 每个元素所占用的字节数目:16

d.dtype.name  # 元素类型:'complex128'

3. 创建特殊类型的多维数组 

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

a1 = np.zeros((3,4))    # 创建3*4全零二维数组

输出:

array([[ 0.,  0.,  0.,  0.],

[ 0.,  0.,  0.,  0.],

[ 0.,  0.,  0.,  0.]])

a1.dtype.name   # 元素类型:'float64'

a1.size  # 元素个数:12

a1.itemsize  # 每个元素所占用的字节个数:8

a2 = np.ones((2,3,4), dtype=np.int16)  # 创建2*3*4全1三维数组

a2 = np.ones((2,3,4), dtype='int16')     # 创建2*3*4全1三维数组

输出:

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)

a3 = np.empty((2,3))  # 创建2*3的未初始化二维数组

输出:(may vary)

array([[ 1.,  2.,  3.],

[ 4.,  5.,  6.]])

a4 = np.arange(10,30,5)   # 初始值10,结束值:30(不包含),步长:5

输出:array([10, 15, 20, 25])

a5 = np.arange(0,2,0.3)    # 初始值0,结束值:2(不包含),步长:0.2

输出:array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])

from numpy import pi

np.linspace(0, 2, 9)   # 初始值0,结束值:2(包含),元素个数:9

输出:

array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ,  1.25,  1.5 ,  1.75,  2.  ])

x = np.linspace(0, 2*pi, 9)

输出:

array([ 0.        ,  0.78539816,  1.57079633,  2.35619449,  3.14159265,

3.92699082,  4.71238898,  5.49778714,  6.28318531])

a = np.arange(6)

输出:

array([0, 1, 2, 3, 4, 5])

b = np.arange(12).reshape(4,3)

输出:

array([[ 0,  1,  2],

[ 3,  4,  5],

[ 6,  7,  8],

[ 9, 10, 11]])

c = np.arange(24).reshape(2,3,4)

输出:

array([[[ 0,  1,  2,  3],

[ 4,  5,  6,  7],

[ 8,  9, 10, 11]],

[[12, 13, 14, 15],

[16, 17, 18, 19],

[20, 21, 22, 23]]]) 

使用numpy.set_printoptions可以设置numpy变量的打印格式

在ipython环境下,使用help(numpy.set_printoptions)查询使用帮助和示例

4. 多维数组的基本操作

加法和减法操作要求操作双方的维数信息一致,均为M*N为数组方可正确执行操作。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

a = np.arange(4)

输出:

array([0, 1, 2, 3])

b = a**2

输出:

array([0, 1, 4, 9])

c = 10*np.sin(a)

输出:

array([ 0.        ,  8.41470985,  9.09297427,  1.41120008])

n < 35

输出:

array([ True,  True,  True,  True], dtype=bool)

A = np.array([[1,1],[0,1]])

B = np.array([[2,0],[3,4]])

C = A * B    # 元素点乘

输出:

array([[2, 0],

[0, 4]])

D = A.dot(B)   # 矩阵乘法

输出:

array([[5, 4],

[3, 4]])

E = np.dot(A,B)   # 矩阵乘法

输出:

array([[5, 4],

[3, 4]])

多维数组操作过程中的类型转换

When operating with arrays of different types, the type of the resulting array corresponds to the more general or precise one (a behavior known as upcasting)

即操作不同类型的多维数组时,结果自动转换为精度更高类型的数组,即upcasting

?

1

2

3

4

a = np.ones((2,3),dtype=int)      # int32

b = np.random.random((2,3))     # float64

b += a  # 正确

a += b  # 错误

?

1

2

3

4

5

6

7

8

9

10

a = np.ones(3,dtype=np.int32)

b = np.linspace(0,pi,3)

c = a + b

d = np.exp(c*1j)

输出:

array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,

-0.54030231-0.84147098j])

d.dtype.name

输出:

'complex128'

多维数组的一元操作,如求和、求最小值、最大值等

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

a = np.random.random((2,3))

a.sum()

a.min()

a.max()

b = np.arange(12).reshape(3,4)

输出:

array([[ 0,  1,  2,  3],

[ 4,  5,  6,  7],

[ 8,  9, 10, 11]])

b.sum(axis=0)    # 按列求和

输出:

array([12, 15, 18, 21])

b.sum(axis=1)    # 按行求和

输出:

array([ 6, 22, 38])

b.cumsum(axis=0)   # 按列进行元素累加

输出:

array([[ 0,  1,  2,  3],

[ 4,  6,  8, 10],

[12, 15, 18, 21]])

b.cumsum(axis=1)   # 按行进行元素累加

输出:

array([[ 0,  1,  3,  6],

[ 4,  9, 15, 22],

[ 8, 17, 27, 38]])

universal functions

?

1

2

3

4

5

B = np.arange(3)

np.exp(B)

np.sqrt(B)

C = np.array([2.,-1.,4.])

np.add(B,C)

其他的ufunc函数包括:

allanyapply_along_axisargmaxargminargsortaveragebincountceilclipconjcorrcoefcovcrosscumprodcumsumdiffdotfloor,innerlexsortmaxmaximummeanmedianminminimumnonzeroouterprodreroundsortstdsumtracetransposevar,vdotvectorizewhere

5. 数组索引、切片和迭代

?

1

2

3

4

5

6

a = np.arange(10)**3

a[2]

a[2:5]

a[::-1] # 逆序输出

for i in a:

print (i**(1/3.))

?

1

2

3

4

5

6

7

8

def f(x,y):

return 10*x+y

b = np.fromfunction(f,(5,4),dtype=int)

b[2,3]

b[0:5,1]

b[:,1]

b[1:3,:]

b[-1]

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

c = np.array([[[0,1,2],[10,11,12]],[[100,101,102],[110,111,112]]])

输出:

array([[[  0,   1,   2],

[ 10,  11,  12]],

[[100, 101, 102],

[110, 111, 112]]])

c.shape

输出:

(2L, 2L, 3L)

c[0,...]

c[0,:,:]

输出:

array([[ 0,  1,  2],

[10, 11, 12]])

c[:,:,2]

c[...,2]

输出:

array([[  2,  12],

[102, 112]])

for row in c:

print(row)

for element in c.flat:

print(element)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

a = np.floor(10*np.random.random((3,4)))

输出:

array([[ 3.,  9.,  8.,  4.],

[ 2.,  1.,  4.,  6.],

[ 0.,  6.,  0.,  2.]])

a.ravel()

输出:

array([ 3.,  9.,  8., ...,  6.,  0.,  2.])

a.reshape(6,2)

输出:

array([[ 3.,  9.],

[ 8.,  4.],

[ 2.,  1.],

[ 4.,  6.],

[ 0.,  6.],

[ 0.,  2.]])

a.T

输出:

array([[ 3.,  2.,  0.],

[ 9.,  1.,  6.],

[ 8.,  4.,  0.],

[ 4.,  6.,  2.]])

a.T.shape

输出:

(4L, 3L)

a.resize((2,6))

输出:

array([[ 3.,  9.,  8.,  4.,  2.,  1.],

[ 4.,  6.,  0.,  6.,  0.,  2.]])

a.shape

输出:

(2L, 6L)

a.reshape(3,-1)

输出:

array([[ 3.,  9.,  8.,  4.],

[ 2.,  1.,  4.,  6.],

[ 0.,  6.,  0.,  2.]])

详查以下函数:

ndarray.shapereshaperesizeravel

6. 组合不同的多维数组

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

a = np.floor(10*np.random.random((2,2)))

输出:

array([[ 5.,  2.],

[ 6.,  2.]])

b = np.floor(10*np.random.random((2,2)))

输出:

array([[ 0.,  2.],

[ 4.,  1.]])

np.vstack((a,b))

输出:

array([[ 5.,  2.],

[ 6.,  2.],

[ 0.,  2.],

[ 4.,  1.]])

np.hstack((a,b))

输出:

array([[ 5.,  2.,  0.,  2.],

[ 6.,  2.,  4.,  1.]])

from numpy import newaxis

np.column_stack((a,b))

输出:

array([[ 5.,  2.,  0.,  2.],

[ 6.,  2.,  4.,  1.]])

a = np.array([4.,2.])

b = np.array([2.,8.])

a[:,newaxis]

输出:

array([[ 4.],

[ 2.]])

b[:,newaxis]

输出:

array([[ 2.],

[ 8.]])

np.column_stack((a[:,newaxis],b[:,newaxis]))

输出:

array([[ 4.,  2.],

[ 2.,  8.]])

np.vstack((a[:,newaxis],b[:,newaxis]))

输出:

array([[ 4.],

[ 2.],

[ 2.],

[ 8.]])

np.r_[1:4,0,4]

输出:

array([1, 2, 3, 0, 4])

np.c_[np.array([[1,2,3]]),0,0,0,np.array([[4,5,6]])]

输出:

array([[1, 2, 3, 0, 0, 0, 4, 5, 6]])

详细使用请查询以下函数:

hstackvstackcolumn_stackconcatenatec_r_

7. 将较大的多维数组分割成较小的多维数组

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

a = np.floor(10*np.random.random((2,12)))

输出:

array([[ 9.,  7.,  9., ...,  3.,  2.,  4.],

[ 5.,  3.,  3., ...,  9.,  7.,  7.]])

np.hsplit(a,3)

输出:

[array([[ 9.,  7.,  9.,  6.],

[ 5.,  3.,  3.,  1.]]), array([[ 7.,  2.,  1.,  6.],

[ 7.,  5.,  0.,  2.]]), array([[ 9.,  3.,  2.,  4.],

[ 3.,  9.,  7.,  7.]])]

np.hsplit(a,(3,4))

输出:

[array([[ 9.,  7.,  9.],

[ 5.,  3.,  3.]]), array([[ 6.],

[ 1.]]), array([[ 7.,  2.,  1., ...,  3.,  2.,  4.],

[ 7.,  5.,  0., ...,  9.,  7.,  7.]])]

实现类似功能的函数包括:

hsplit,vsplit,array_split

8.  多维数组的复制操作

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

a = np.arange(12)

输出:

array([ 0,  1,  2, ...,  9, 10, 11])

not copy at all

b = a

b is a    # True

b.shape = 3,4

a.shape  # (3L,4L)

def f(x)   # Python passes mutable objects as references, so function calls make no copy.

print(id(x))   # id是python对象的唯一标识符

id(a)   # 111833936L

id(b)   # 111833936L

f(a)     # 111833936L

浅复制

c = a.view()

c is a   # False

c.base is a   # True

c.flags.owndata    # False

c.shape = 2,6

a.shape   # (3L,4L)

c[0,4] = 1234

print(a)

输出:

array([[   0,    1,    2,    3],

[1234,    5,    6,    7],

[   8,    9,   10,   11]])

s = a[:,1:3]

s[:] = 10

print(a)

输出:

array([[   0,   10,   10,    3],

[1234,   10,   10,    7],

[   8,   10,   10,   11]])

深复制

d = a.copy()

d is a   # False

d.base is a   # False

d[0,0] = 9999

print(a)

输出:

array([[   0,   10,   10,    3],

[1234,   10,   10,    7],

[   8,   10,   10,   11]])

numpy基本函数和方法一览

Array   Creation

arangearraycopyemptyempty_likeeyefromfilefromfunctionidentitylinspacelogspacemgridogridonesones_likerzeros,zeros_like

Conversions

ndarray.astypeatleast_1datleast_2datleast_3dmat

Manipulations

array_splitcolumn_stackconcatenatediagonaldsplitdstackhsplithstackndarray.itemnewaxisravelrepeatreshaperesize,squeezeswapaxestaketransposevsplitvstack

Questionsallanynonzerowhere

Ordering

argmaxargminargsortmaxminptpsearchsortedsort

Operations

choosecompresscumprodcumsuminnerndarray.fillimagprodputputmaskrealsum

Basic Statistics

covmeanstdvar

Basic Linear Algebra

crossdotouterlinalg.svdvdot

完整的函数和方法一览表链接:

https://docs.scipy.org/doc/numpy-dev/reference/routines.html#routines

9. 特殊的索引技巧

1 a = np.arange(12)**2

2 输出:

3 array([  0,   1,   4, ...,  81, 100, 121])

4 i = np.array([1,1,3,8,5])

5 a[i]

6 输出:

7 array([ 1,  1,  9, 64, 25])

8

9 j = np.array([[3,4],[9,7]])

10 a[j]

11 输出:

12 array([[ 9, 16],

13        [81, 49]])

14

15

16 palette = np.array([[0,0,0],[255,0,0],[0,255,0],[0,0,255],[255,255,255]])

17 image = np.array([[0,1,2,0],[0,3,4,0]])

18 palette[image]

19 输出:

20 array([[[  0,   0,   0],

21         [255,   0,   0],

22         [  0, 255,   0],

23         [  0,   0,   0]],

24

25        [[  0,   0,   0],

26         [  0,   0, 255],

27         [255, 255, 255],

28         [  0,   0,   0]]])

29

30

31 i = np.array([[0,1],[1,2]])

32 j = np.array([[2,1],[3,3]])

33 a[i,j]

34 输出:

35 array([[ 2,  5],

36        [ 7, 11]])

37 l = [i,j]

38 a[l]

39 输出:

40 array([[ 2,  5],

41        [ 7, 11]])

42

43

44 a[i,2]

45 输出:

46 array([[ 2,  6],

47        [ 6, 10]])

48

49 a[:,j]

50 输出:

51 array([[[ 2,  1],

52         [ 3,  3]],

53

54        [[ 6,  5],

55         [ 7,  7]],

56

57        [[10,  9],

58         [11, 11]]])

s = np.array([i,j])

print(s)

array([[[0, 1],

[1, 2]],

[[2, 1],

[3, 3]]])

a[tuple(s)]

输出:

array([[ 2,  5],

[ 7, 11]])

print(tupe(s))

输出:

(array([[0, 1],

[1, 2]]), array([[2, 1],

[3, 3]]))

10. 寻找最大值/最小值及其对应索引值

time = np.linspace(20, 145, 5)

输出:

array([  20.  ,   51.25,   82.5 ,  113.75,  145.  ])

data = np.sin(np.arange(20)).reshape(5,4)

输出:

array([[ 0.        ,  0.84147098,  0.90929743,  0.14112001],

[-0.7568025 , -0.95892427, -0.2794155 ,  0.6569866 ],

[ 0.98935825,  0.41211849, -0.54402111, -0.99999021],

[-0.53657292,  0.42016704,  0.99060736,  0.65028784],

[-0.28790332, -0.96139749, -0.75098725,  0.14987721]])

ind = data.argmax(axis=0)

输出:

array([2, 0, 3, 1], dtype=int64)

time_max = time[ind]

输出:

array([  82.5 ,   20.  ,  113.75,   51.25])

data_max = data[ind, xrange(data.shape[1])]

输出:

array([ 0.98935825,  0.84147098,  0.99060736,  0.6569866 ])

np.all(data_max == data.max(axis=0))

输出:

True

a = np.arange(5)

a[[1,3,4]] = 0

print(a)

输出:

array([0, 0, 2, 0, 0])

a = np.arange(5)

a[[0,0,2]] = [1,2,3]

print(a)

输出:

array([2, 1, 3, 3, 4])

a = np.arange(5)

a[[0,0,2]] += 1

print(a)

输出:

array([1, 1, 3, 3, 4])

a = np.arange(12).reshape(3,4)

b = a > 4

输出:

array([[False, False, False, False],

[False,  True,  True,  True],

[ True,  True,  True,  True]], dtype=bool)

a[b]

输出:

array([ 5,  6,  7,  8,  9, 10, 11])

a[b] = 0

print(a)

输出:

array([[0, 1, 2, 3],

[4, 0, 0, 0],

[0, 0, 0, 0]])

a = np.arange(12).reshape(3,4)

b1 = np.array([False,True,True])

b2 = n.array([True,False,True,False])

a[b1,:]

输出:

array([[ 4,  5,  6,  7],

[ 8,  9, 10, 11]])

a[b1]

输出:

array([[ 4,  5,  6,  7],

[ 8,  9, 10, 11]])

a[:,b2]

输出:

array([[ 0,  2],

[ 4,  6],

[ 8, 10]])

a[b1,b2]

输出:

array([ 4, 10])

11. ix_() function

1 a = np.array([2,3,4,5])

2 b = np.array([8,5,4])

3 c = np.array([5,4,6,8,3])

4 ax,bx,cx = np.ix_(a,b,c)

5 print(ax)   # (4L, 1L, 1L)

6 输出:

7 array([[[2]],

8

9        [[3]],

10

11        [[4]],

12

13        [[5]]])

14 print(bx)    # (1L, 3L, 1L)

15 输出:

16 array([[[8],

17         [5],

18         [4]]])

19 print(cx)   # (1L, 1L, 5L)

20 输出:

21 array([[[5, 4, 6, 8, 3]]])

22

23

24 result = ax + bx*cx

25 输出:

26 array([[[42, 34, 50, 66, 26],

27         [27, 22, 32, 42, 17],

28         [22, 18, 26, 34, 14]],

29

30        [[43, 35, 51, 67, 27],

31         [28, 23, 33, 43, 18],

32         [23, 19, 27, 35, 15]],

33

34        [[44, 36, 52, 68, 28],

35         [29, 24, 34, 44, 19],

36         [24, 20, 28, 36, 16]],

37

38        [[45, 37, 53, 69, 29],

39         [30, 25, 35, 45, 20],

40         [25, 21, 29, 37, 17]]])

41

42 result[3,2,4]

43 输出:17

12. 线性代数运算

a = np.array([[1.,2.],[3.,4.]])

a.transpose()   # 转置

np.linalg.inv(a)   # 求逆

u = np.eye(2)   # 产生单位矩阵

np.dot(a,a)    # 矩阵乘积

np.trace(a)    # 求矩阵的迹

y = np.array([5.],[7.]])

np.linalg.solve(a,y)  # 求解线性方程组

np.linalg.eig(a)   # 特征分解

“Automatic” Reshaping

1 a = np.arange(30)

2 a.shape = 2,-1,3

3 a.shape   #  (2L, 5L, 3L)

4 print(a)

5 array([[[ 0,  1,  2],

6         [ 3,  4,  5],

7         [ 6,  7,  8],

8         [ 9, 10, 11],

9         [12, 13, 14]],

10

11        [[15, 16, 17],

12         [18, 19, 20],

13         [21, 22, 23],

14         [24, 25, 26],

15         [27, 28, 29]]])

1 x = np.arange(0,10,2)

2 y = np.arange(5)

3 m = np.vstack([x,y])

4 输出:

5 array([[0, 2, 4, 6, 8],

6        [0, 1, 2, 3, 4]])

7 n = np.hstack([x,y])

8 输出:

9 array([0, 2, 4, 6, 8, 0, 1, 2, 3, 4])

13. 矩阵的创建

a = np.array([1,2,3])

a1 = np.mat(a)

输出:

matrix([[1, 2, 3]])

type(a1)

输出:

numpy.matrixlib.defmatrix.matrix

a1.shape

输出:

(1L, 3L)

a.shape

输出:

(3L,)

b=np.matrix([1,2,3])

输出:

matrix([[1, 2, 3]])

from numpy import *

data1 = mat(zeros((3,3)))

data2 = mat(ones((2,4)))

data3 = mat(random.rand(2,2))

data4 = mat(random.randint(2,8,size=(2,5)))

data5 = mat(eye(2,2,dtype=int))

14. 常见的矩阵运算

1 a1 = mat([1,2])

2 a2 = mat([[1],[2]])

3 a3 = a1 * a2

4 print(a3)

5 输出:

6 matrix([[5]])

7

8 print(a1*2)

9 输出:

10 matrix([[2, 4]])

11

12 a1 = mat(eye(2,2)*0.5)

13 print(a1.I)

14 输出:

15 matrix([[ 2.,  0.],

16         [ 0.,  2.]])

17

18

19 a1 = mat([[1,2],[2,3],[4,2]])

20 a1.sum(axis=0)

21 输出:

22 matrix([[7, 7]])

23 a1.sum(axis=1)

24 输出:

25 matrix([[3],

26         [5],

27         [6]])

28 a1.max()  # 求矩阵元素最大值

29 输出:

30 4

31 a1.min()  # 求矩阵元素最小值

32 输出:

33 1

34

35 np.max(a1,0)  # 求矩阵每列元素最大值

36 输出:

37 matrix([[4, 3]])

38 np.max(a1,1)  # 求矩阵每行元素最大值

39 输出:

40 matrix([[2],

41         [3],

42         [4]])

43

44

45 a = mat(ones((2,2)))

46 b = mat(eye((2)))

47 c = hstack((a,b))

48 输出:

49 matrix([[ 1.,  1.,  1.,  0.],

50         [ 1.,  1.,  0.,  1.]])

51 d = vstack((a,b))

52 输出:

53 matrix([[ 1.,  1.],

54         [ 1.,  1.],

55         [ 1.,  0.],

56         [ 0.,  1.]])

15. 矩阵、数组、列表之间的互相转换

1 aa = [[1,2],[3,4],[5,6]]

2 bb = array(aa)

3 cc = mat(bb)

4

5 cc.getA()  # 矩阵转换为数组

6 cc.tolist()  # 矩阵转换为列表

7 bb.tolist() # 数组转换为列表

8

9

10 # 当列表为一维时,情况有点特殊

11 aa = [1,2,3,4]

12 bb = array(aa)

13 输出:

14 array([1, 2, 3, 4])

15 cc = mat(bb)

16 输出:

17 matrix([[1, 2, 3, 4]])

18

19 cc.tolist()

20 输出:

21 [[1, 2, 3, 4]]

22

23 bb.tolist()

24 输出:

25 [1, 2, 3, 4]

26

27 cc.tolist()[0]

28 输出:

29 [1, 2, 3, 4]

2.python中的矩阵、多维数组----numpy的更多相关文章

  1. python中的矩阵、多维数组----numpy

    https://docs.scipy.org/doc/numpy-dev/user/quickstart.html  (numpy官网一些教程) numpy教程:数组创建 python中的矩阵.多维数 ...

  2. 42-python中的矩阵、多维数组----numpy

    xzcfightingup   python中的矩阵.多维数组----numpy 1. 引言 最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易, ...

  3. [转]Python中的矩阵转置

    Python中的矩阵转置 via 需求: 你需要转置一个二维数组,将行列互换. 讨论: 你需要确保该数组的行列数都是相同的.比如: arr = [[1, 2, 3], [4, 5, 6], [7, 8 ...

  4. Python中的矩阵操作

    Numpy 通过观察Python的自有数据类型,我们可以发现Python原生并不提供多维数组的操作,那么为了处理矩阵,就需要使用第三方提供的相关的包. NumPy 是一个非常优秀的提供矩阵操作的包.N ...

  5. 地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了

    地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了 四叉树对于区域查询,效率比较高. 原理图

  6. C语言中如何将二维数组作为函数的参数传递

    今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...

  7. php中count获取多维数组长度的方法

    转自:http://www.jb51.net/article/57021.htm 本文实例讲述了php中count获取多维数组长度的实现方法.分享给大家供大家参考.具体分析如下: 先来看看下面程序运行 ...

  8. php中向前台js中传送一个二维数组

    在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...

  9. 关于python中的矩阵乘法(array和mat类型)

    关于python中的矩阵乘法,我们一般有两种数据格式可以实现:np.array()类型和np.mat()类型: 对于这两种数据类型均有三种操作方式: (1)乘号 * (2)np.dot() (3)np ...

  10. 以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组

    学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简 ...

随机推荐

  1. 解决Eclipse和myeclipse在进行 html,jsp等 页面编辑时,自动格式化变丑的问题

    在eclipse和myelipse写JAVA代码时中使用ctrl+shift+f 快捷键自动排版省时又省力,排版后的代码规范美观又层次性,但在我们写jsp或html代码时,使用这个快捷键排版简直奇丑无 ...

  2. Mysql异常_01_ 誓死登进mysql_Can't connect to MySQL server on 'localhost' (10061)

    现象:打开cmd,输入命令:mysql -uroot -p 回车之后,输入密码,结果进不去mysql,并且抛出异常 异常:Can't connect to MySQL server on 'local ...

  3. PHP获取当前日期及本周一是几月几号的方法

    这篇文章主要介绍了PHP获取当前日期及本周一是几月几号的方法,涉及php时间戳.日期转换与运算相关操作技巧,需要的朋友可以参考下 本文实例讲述了PHP获取当前日期及本周一是几月几号的方法.分享给大家供 ...

  4. Oracle忘记用户名密码

    一.oracle 11g登录服务开启 成功安装Oracle 11g后,共有7个服务,这七个服务的含义分别为:1. Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写 ...

  5. 关于ATML信号定义的理解-1

    1.XML中的类型标签: <xs:complexType>复合类型和<xs:simpleTyle>简单类型是数据结构类型,包含了各种类型的属性.可以被子类型继承,继承方式为&l ...

  6. Failed to install xxxx.apk on device 'emulator-5554!

    异常信息:[HelloAndroid] Performing com.example.helloandroid.HelloAndroid activity launch[HelloAndroid] U ...

  7. ACM学习历程—UVALive 7147 World Cup(分类讨论 && 贪心)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  8. jexus入门

    参考:https://www.linuxdot.net/bbsfile-3084 一.Jexus简介:Jexus web server for linux 是一款基于.NET兼容环境,运行于Linux ...

  9. 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner

    目录(?)[-] GridView Spinner GridView GridView是网格状布局,如图所示.在了解ListView后,很容易了解GridView.下面是例子的XML文件. <? ...

  10. sql 基础总结