42-python中的矩阵、多维数组----numpy
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 npa = 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 # 元素个数:3a.itemsize #每个元素所占用的字节数目:4b=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 # 元素个数:6b.itemsize # 每个元素所占用的字节数目:4c=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 # 元素个数:6c.itemsize # 每个元素所占用的字节数目:2c.ndim # 维数d=np.array([[1,2,3],[4,5,6]],dtype=complex) # 复数二维数组d.itemsize # 每个元素所占用的字节数目:16d.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 # 元素个数:12a1.itemsize # 每个元素所占用的字节个数:8a2 = 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 pinp.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) # int32b = np.random.random((2,3)) # float64b += 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 + bd = 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函数包括:
all, any, apply_along_axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor,inner, lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sort, std, sum, trace, transpose, var,vdot, vectorize, where
5. 数组索引、切片和迭代
|
1
2
3
4
5
6
|
a = np.arange(10)**3a[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+yb = 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.shape, reshape, resize, ravel
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 newaxisnp.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]]) |
详细使用请查询以下函数:
hstack, vstack, column_stack, concatenate, c_, 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 allb = ab is a # Trueb.shape = 3,4a.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) # 111833936Lid(b) # 111833936Lf(a) # 111833936L浅复制c = a.view()c is a # Falsec.base is a # Truec.flags.owndata # Falsec.shape = 2,6a.shape # (3L,4L)c[0,4] = 1234print(a)输出:array([[ 0, 1, 2, 3], [1234, 5, 6, 7], [ 8, 9, 10, 11]])s = a[:,1:3]s[:] = 10print(a)输出:array([[ 0, 10, 10, 3], [1234, 10, 10, 7], [ 8, 10, 10, 11]])深复制d = a.copy()d is a # Falsed.base is a # Falsed[0,0] = 9999print(a)输出:array([[ 0, 10, 10, 3], [1234, 10, 10, 7], [ 8, 10, 10, 11]]) |
numpy基本函数和方法一览
Array Creation
arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, r, zeros,zeros_like
Conversions
ndarray.astype, atleast_1d, atleast_2d, atleast_3d, mat
Manipulations
array_split, column_stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, ndarray.item, newaxis, ravel, repeat, reshape, resize,squeeze, swapaxes, take, transpose, vsplit, vstack
Questionsall, any, nonzero, where
Ordering
argmax, argmin, argsort, max, min, ptp, searchsorted, sort
Operations
choose, compress, cumprod, cumsum, inner, ndarray.fill, imag, prod, put, putmask, real, sum
Basic Statistics
Basic Linear Algebra
cross, dot, outer, linalg.svd, vdot
完整的函数和方法一览表链接:
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
42-python中的矩阵、多维数组----numpy的更多相关文章
- python中的矩阵、多维数组----numpy
https://docs.scipy.org/doc/numpy-dev/user/quickstart.html (numpy官网一些教程) numpy教程:数组创建 python中的矩阵.多维数 ...
- [转]Python中的矩阵转置
Python中的矩阵转置 via 需求: 你需要转置一个二维数组,将行列互换. 讨论: 你需要确保该数组的行列数都是相同的.比如: arr = [[1, 2, 3], [4, 5, 6], [7, 8 ...
- Python中的矩阵操作
Numpy 通过观察Python的自有数据类型,我们可以发现Python原生并不提供多维数组的操作,那么为了处理矩阵,就需要使用第三方提供的相关的包. NumPy 是一个非常优秀的提供矩阵操作的包.N ...
- 地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了
地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了 四叉树对于区域查询,效率比较高. 原理图
- C语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
- php中count获取多维数组长度的方法
转自:http://www.jb51.net/article/57021.htm 本文实例讲述了php中count获取多维数组长度的实现方法.分享给大家供大家参考.具体分析如下: 先来看看下面程序运行 ...
- php中向前台js中传送一个二维数组
在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...
- 关于python中的矩阵乘法(array和mat类型)
关于python中的矩阵乘法,我们一般有两种数据格式可以实现:np.array()类型和np.mat()类型: 对于这两种数据类型均有三种操作方式: (1)乘号 * (2)np.dot() (3)np ...
- 以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组
学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简 ...
随机推荐
- iOS 一些琐碎的知识点
1. Xcode左边导航栏中,类文件后面的标记"A""M""?"符号的含义 M = Locally modified 文件已被修改 U = ...
- 【Linux_Unix系统编程】Chapter9 进程凭证
chapter9 进程凭证 每个进程都有一套用数字表示的用户ID(UID)和组ID(GID).有时也将这些ID称子为进程凭证. 1:实际用户ID和实际组ID 2:有效用户ID和有效组ID 3:保存的s ...
- php printf() 输出格式化的字符串
php printf() 函数用于输出格式化的字符串,本文章向码农介绍php printf()函数的使用方法和基本使用实例,感兴趣的码农可以参考一下. 定义和用法 printf()函数输出格式化的字符 ...
- sencha touch 小米3无法点击问题 修复
修改源码文件夹下event/publisher/Dom.js中的attachListener方法,代码如下 attachListener: function(eventName, doc) { if ...
- django框架预备知识
内容: 1.web预备知识 2.django介绍 3.web框架的本质及分类 4.django安装与基本设置 1.web预备知识 HTTP协议:https://www.cnblogs.com/wyb6 ...
- face,Pool
.a 在使用Python进行系统管理时,特别是同时操作多个文件目录或者远程控制多台主机,并行操作可以节约大量的时间.如果操作的对象数目不大时,还可以直接使用Process类动态的生成多个进程 ,十几个 ...
- Tensorflow线程和队列
读取数据 小数量数据读取 这仅用于可以完全加载到存储器中的小的数据集有两种方法: 存储在常数中. 存储在变量中,初始化后,永远不要改变它的值. 使用常数更简单一些,但是会使用更多的内存,因为常数会内联 ...
- 解决Specifying a namespace in include()withou providing an app_name
python3 Django 环境下,如果你遇到namespace没有注册以及在根目录下urls.py中的include方法的第二个参数namespace添加之后就出错的问题.请在[app_name] ...
- memcache.so的报错信息,未解决
memcache.so php版本5.6 executor_globals_id in Unknown on line 0 编译也成功了,路径也是在其他so文件的目录 但是加载失败的,查看apache ...
- VBA 判断单元格是否为公式,可用于数组
Function ISFORMULA(ByVal rg As Object) As Variant Dim temp As Variant Dim i As Integer, j ...