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