当前位置:   article > 正文

Python 一维及多维数组及基本操作_python多维数组加一维数组

python多维数组加一维数组

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

= 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([[[1111],

        [1111],

        [1111]],

 

       [[1111],

        [1111],

        [1111]]], 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([10152025])

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(029)   # 初始值0,结束值:2(包含),元素个数:9

输出:

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

= np.linspace(02*pi, 9)

输出:

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

        3.92699082,  4.71238898,  5.49778714,  6.28318531])

 

 

= np.arange(6)

输出:

array([012345])

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

输出:

array([[ 0,  1,  2],

       3,  4,  5],

       6,  7,  8],

       91011]])

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

输出:

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

        4,  5,  6,  7],

        8,  91011]],

 

       [[12131415],

        [16171819],

        [20212223]]]) 

使用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

= np.arange(4)

输出:

array([0123])

= a**2

输出:

array([0149])

= 10*np.sin(a)

输出:

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

 

 

n < 35

输出:

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

 

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

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

= * B    # 元素点乘

输出:

array([[20],

       [04]])

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

输出:

array([[54],

       [34]])

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

输出:

array([[54],

       [34]])

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

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

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

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

+= a  # 正确

+= b  # 错误

1

2

3

4

5

6

7

8

9

10

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

= np.linspace(0,pi,3)

= + b

= 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

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

a.sum()

a.min()

a.max()

 

 

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

输出:

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

       4,  5,  6,  7],

       8,  91011]])

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

输出:

array([12151821])

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

输出:

array([ 62238])

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

输出:

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

       4,  6,  810],

       [12151821]])

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

输出:

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

       4,  91522],

       8172738]])

universal functions

1

2

3

4

5

= np.arange(3)

np.exp(B)

np.sqrt(B)

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

np.add(B,C)

其他的ufunc函数包括:

allanyapply_along_axisargmaxargminargsortaveragebincountceilclipconjcorrcoefcovcrosscumprodcumsumdiffdotfloor,innerlexsortmaxmaximummeanmedianminminimumnonzeroouterprodreroundsortstdsumtracetransposevar,vdotvectorizewhere

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

1

2

3

4

5

6

= np.arange(10)**3

a[2]

a[2:5]

a[::-1# 逆序输出

for in a:

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

1

2

3

4

5

6

7

8

def f(x,y):

    return 10*x+y

= 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

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

输出:

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

        10,  11,  12]],

 

       [[100101102],

        [110111112]]])

c.shape

输出:

(2L2L3L)

c[0,...]

c[0,:,:]

输出:

array([[ 0,  1,  2],

       [101112]])

c[:,:,2]

c[...,2]

输出:

array([[  2,  12],

       [102112]])

 

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

= 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

输出:

(4L3L)

a.resize((2,6))

输出:

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

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

a.shape

输出:

(2L6L)

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

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

输出:

array([[ 5.,  2.],

       6.,  2.]])

= 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.]])

 

 

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

= 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([12304])

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

输出:

array([[123000456]])

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

hstackvstackcolumn_stackconcatenatec_r_

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

= 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

= np.arange(12)

输出:

array([ 0,  1,  2, ...,  91011])

 

 

not copy at all

 

= a

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

 

 

浅复制

 

= a.view()

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]])

= a[:,1:3]

s[:] = 10

print(a)

输出:

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

       [1234,   10,   10,    7],

       [   8,   10,   10,   11]])

 

 

深复制

= a.copy()

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. 特殊的索引技巧

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

11. ix_() function

 

12. 线性代数运算

 

“Automatic” Reshaping

 

13. 矩阵的创建

  1. a = np.array([1,2,3])
  2. a1 = np.mat(a)
  3. 输出:
  4. matrix([[1, 2, 3]])
  5. type(a1)
  6. 输出:
  7. numpy.matrixlib.defmatrix.matrix
  8. a1.shape
  9. 输出:
  10. (1L, 3L)
  11. a.shape
  12. 输出:
  13. (3L,)
  14. b=np.matrix([1,2,3])
  15. 输出:
  16. matrix([[1, 2, 3]])
  17. from numpy import *
  18. data1 = mat(zeros((3,3)))
  19. data2 = mat(ones((2,4)))
  20. data3 = mat(random.rand(2,2))
  21. data4 = mat(random.randint(2,8,size=(2,5)))
  22. 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. print(a1*2)
  8. 输出:
  9. matrix([[2, 4]])
  10. a1 = mat(eye(2,2)*0.5)
  11. print(a1.I)
  12. 输出:
  13. matrix([[ 2., 0.],
  14. [ 0., 2.]])
  15. a1 = mat([[1,2],[2,3],[4,2]])
  16. a1.sum(axis=0)
  17. 输出:
  18. matrix([[7, 7]])
  19. a1.sum(axis=1)
  20. 输出:
  21. matrix([[3],
  22. [5],
  23. [6]])
  24. a1.max() # 求矩阵元素最大值
  25. 输出:
  26. 4
  27. a1.min() # 求矩阵元素最小值
  28. 输出:
  29. 1
  30. np.max(a1,0) # 求矩阵每列元素最大值
  31. 输出:
  32. matrix([[4, 3]])
  33. np.max(a1,1) # 求矩阵每行元素最大值
  34. 输出:
  35. matrix([[2],
  36. [3],
  37. [4]])
  38. a = mat(ones((2,2)))
  39. b = mat(eye((2)))
  40. c = hstack((a,b))
  41. 输出:
  42. matrix([[ 1., 1., 1., 0.],
  43. [ 1., 1., 0., 1.]])
  44. d = vstack((a,b))
  45. 输出:
  46. matrix([[ 1., 1.],
  47. [ 1., 1.],
  48. [ 1., 0.],
  49. [ 0., 1.]])

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

  1. aa = [[1,2],[3,4],[5,6]]
  2. bb = array(aa)
  3. cc = mat(bb)
  4. cc.getA() # 矩阵转换为数组
  5. cc.tolist() # 矩阵转换为列表
  6. bb.tolist() # 数组转换为列表
  7. # 当列表为一维时,情况有点特殊
  8. aa = [1,2,3,4]
  9. bb = array(aa)
  10. 输出:
  11. array([1, 2, 3, 4])
  12. cc = mat(bb)
  13. 输出:
  14. matrix([[1, 2, 3, 4]])
  15. cc.tolist()
  16. 输出:
  17. [[1, 2, 3, 4]]
  18. bb.tolist()
  19. 输出:
  20. [1, 2, 3, 4]
  21. cc.tolist()[0]
  22. 输出:
  23. [1, 2, 3, 4]

参考博客:

https://www.cnblogs.com/xzcfightingup/p/7598293.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/437522
推荐阅读
相关标签
  

闽ICP备14008679号