0%

矩阵操作

1. 矩阵维度变换

1.1 numpy.reshape(a, newshape, order=’C’)

reshape() 函数经常用做一维数组维度的变化,也就是将一维数组变化成为指定维度的矩阵。order 是指不同的索引规则,一般默认 C,按照行进行运算。
示例:

1
2
3
4
print np.reshape(np.arange(10), (2, 5))

[[0 1 2 3 4]
[5 6 7 8 9]]

1.2 numpy.ravel(a, order=’C’)

ravel 函数是将矩阵数据进行降维操作,例如,将二维的数据降成一维的
示例:

1
2
3
4
5
6
data = np.reshape(np.arange(10), (2, 5))
print data.reshape(-1)
print data.ravel()

[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]

1.3 flatten([order])

该成员函数也是用于降维使用的,起作用与 ravel 函数类似
示例:

1
2
3
4
data = np.reshape(np.arange(10), (2, 5))
print data.flatten()

[0 1 2 3 4 5 6 7 8 9]

与 ravel 函数的区别:ravel 是原始数据的视图,对其进行修改之后原始数据也将会被修改;而 flatten 函数则返回原始数据的拷贝,对其进行修改并不会对原始数据产生影响。
示例:

1.4 ravel 函数

1
2
3
4
5
6
7
data = np.reshape(np.arange(10), (2, 5))
data1 = data.ravel()
data1[0] = 100
print data

[[100 1 2 3 4]
[ 5 6 7 8 9]]

1.5 flatten 函数

1
2
3
4
5
6
7
data = np.reshape(np.arange(10), (2, 5))
data1 = data.flatten()
data1[0] = 100
print data

[[0 1 2 3 4]
[5 6 7 8 9]]

2.矩阵组合

这里使用两个测试用矩阵:

1
2
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

2.1 水平组合

示例:

1
2
3
4
5
print np.hstack((a, b))
print np.concatenate((a, b), axis=1)

[[1 2 5 6]
[3 4 7 8]]

2.2 垂直组合

示例:

1
2
3
4
5
6
7
print np.vstack((a, b))
print np.concatenate((a, b), axis=0)

[[1 2]
[3 4]
[5 6]
[7 8]]

2.3 深度组合

示例:

1
2
3
4
5
6
7
print np.dstack((a, b))

[[[1 5]
[2 6]]

[[3 7]
[4 8]]]
  1. 矩阵分割

这里使用如下数据进行测试:

1
2
3
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])

3.1 水平分割

在理解了 2.1 节中的水平组合之后,其逆过程就很容易理解了。
示例:将示例矩阵分为等分成为三份

1
2
3
4
5
6
7
8
9
print np.hsplit(a, 3)

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

3.2 垂直分割

其过程类似上面的过程
示例:

1
2
3
print np.vsplit(a, 3)

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

3.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
print np.dsplit(np.arange(27).reshape((3, 3, 3)), 3)

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

[[ 9],
[12],
[15]],

[[18],
[21],
[24]]]), array([[[ 1],
[ 4],
[ 7]],

[[10],
[13],
[16]],

[[19],
[22],
[25]]]), array([[[ 2],
[ 5],
[ 8]],

[[11],
[14],
[17]],

[[20],
[23],
[26]]])]
  1. 矩阵的属性

这里测试用的数据还是 3 节中的数据

4.1 矩阵维度

1
2
3
print np.shape(a)

(3, 3)

4.2 矩阵数据类型

1
2
3
print a.dtype

int64

4.3 矩阵元素个数

1
2
3
print a.size

9

4.4 矩阵元素占用字节数

1
2
3
print a.itemsize

8

4.5 矩阵总占用字节数

1
2
3
4

print a.nbytes

72