zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python矩阵操作:维度变换、矩阵组合、矩阵分割

Python 操作 矩阵 组合 分割 变换 维度
2023-09-11 14:22:29 时间

1. 矩阵维度变换

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

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

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函数是将矩阵数据进行降维操作,例如,将二维的数据降成一维的
示例:

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函数类似
示例:

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

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

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

# ravel函数
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]]

# flatten函数
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. 矩阵组合

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

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

2.1 水平组合

示例:

print np.hstack((a, b))
print np.concatenate((a, b), axis=1)

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

2.2 垂直组合

示例:

print np.vstack((a, b))
print np.concatenate((a, b), axis=0)

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

2.3 深度组合

示例:

print np.dstack((a, b))

[[[1 5]
  [2 6]]

 [[3 7]
  [4 8]]]

3. 矩阵分割

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

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

3.1 水平分割

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

print np.hsplit(a, 3)

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

3.2 垂直分割

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

print np.vsplit(a, 3)

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

3.3 深度分割

示例:注意,深度分割只对三维以上矩阵有效

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

4. 矩阵的属性

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

4.1 矩阵维度

print np.shape(a)

(3, 3)

4.2 矩阵数据类型

print a.dtype

int64

4.3 矩阵元素个数

print a.size

9

4.4 矩阵元素占用字节数

print a.itemsize

8

4.5 矩阵总占用字节数

print a.nbytes

72

5. 参考

Python之数组拼接,组合,连接