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

1. 引言

最近在将一个算法由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
= 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. 特殊的索引技巧

 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]

内容整理参考链接如下:

https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

http://python.usyiyi.cn/translate/NumPy_v111/reference/arrays.scalars.html#arrays-scalars-built-in

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

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

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

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

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

  3. Python中的矩阵操作

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

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

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

  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. 以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组

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

随机推荐

  1. Appium測试安卓Launcher以滑动窗口获得目标应用

    所谓Launcher,指的是安卓的桌面管理程序,全部的应用图标都放在launcher上面.事实上这是一个非常easy的样例,仅仅是为了验证几点想法而已. 1.实验目的 做这个试验的目的有二 尝试下窗口 ...

  2. thinkphp中获取参数值的方法

    以获取$type这个参数为例:一:通过传统方法:$_GET, $_POST    $type = intval($_GET['type'])这种方法需要自己写过滤规则,保证数据安全. 二:在Actio ...

  3. Python学习笔记11:标准库之文件管理(os包,shutil包)

    1 os包 os包包含各种各样的函数,以实现操作系统的很多功能.这个包很庞杂.os包的一些命令就是用于文件管理. 我们这里列出最经常使用的: mkdir(path) 创建新文件夹.path为一个字符串 ...

  4. 外网登陆SAP的两种方式

    1.用SAP router实现从外网登录SAPserver(方式一) 自已搭建的局域网结构例如以下: SAPserverIP: 192.168.0.2, 路由器中设为DMZ区 在SAPserver上启 ...

  5. [k8s]k8s 1.9(on the fly搭建) 1.9_cni-flannel部署排错 ipvs模式

    角色 节点名 节点ip master n1 192.168.14.11 节点1 n2 192.168.14.12 节点2 n3 192.168.14.13 https://raw.githubuser ...

  6. Base64转码和解码的帮助类

    /** * 将字符串进行Base64编码 * * @param s 被编码的字符串 * @return 编码后的字符串 */ public static String encoderBASE64(St ...

  7. Eclipse build error 解决方法The library '*.jar' contains native libraries that will not run on the dev

    [2013-08-29 16:56:58 - jarsotest] The library 'wnp.jar' contains native libraries that will not run ...

  8. [转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND

    原贴: cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND 上一篇介绍了QUAD_COMMAND渲染命令,顺带介绍了VAO和VBO,这一篇介绍批处 ...

  9. spark内存概述

    转自:https://github.com/jacksu/utils4s/blob/master/spark-knowledge/md/spark%E5%86%85%E5%AD%98%E6%A6%82 ...

  10. Oracle快速测试连接是否成功

    Oracle 客户端建立了TNS连接后,可以快速查看连接是否成功. 1.在cmd中执行命令tnsping orcl(全局数据库名称),即可.以下是命令执行后的示例. 2.如果上一步成功,可以进一步执行 ...