Python+numpy操作
1、矩阵创建及简单操作
(1)可以通过python的list来创建数组,假如说list = [1 , 2 , 3 , 4] ,array_1 = np.array(list_1)创建一个数组。
(2)还可以通过arange来创建数组,比方说array_4 = np.arange(1 ,10)即可以创建一个从1到10的数组。
2、数组行数和列数的查看
(1)array.shape返回数组的行数和列数; array.size返回数组的元素个数;array.dtype返回数组里元素的数据类型。
numpy 创建的数组都有一个shape属性,它是一个元组,返回各个维度的维数。有时候我们可能需要知道某一维的特定维数。
当想要创建二维数组时
>>> import numpy as np
>>> y = np.array([[1,2,3],[4,5,6]])
>>> print(y)
[[1 2 3]
[4 5 6]]
>>> print(y.shape)
(2, 3)
>>> print(y.shape[0])
2
>>> print(y.shape[1])
3
可以看到y是一个两行三列的二维数组,y.shape[0]代表行数,y.shape[1]代表列数。
三维情况
>>> x = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[0,1,2]],[[3,4,5],[6,7,8]]])
>>>> print(x)
[[[1 2 3]
[4 5 6]]
[[7 8 9]
[0 1 2]]
[[3 4 5]
[6 7 8]]]
>>> print(x.shape)
(3, 2, 3)
>>> print(x.shape[0])
3
>>> print(x.shape[1])
2
>>> print(x.shape[2])
3
可以看到x是一个包含了3个两行三列的二维数组的三维数组,x.shape[0]代表包含二维数组的个数,x.shape[1]表示二维数组的行数,x.shape[2]表示二维数组的列数。
>>> print(x.shape[:3])
(3, 2, 3)
x.shape[:3]表示返回(3, 2, 3),分别表示三维数组中二维数组的个数、单个二维数组的行数、单个二维数组的列数。
3、reshape()的使用
reshape()是数组对象中的方法,用于改变数组的形状。
当参数中有-1的情况:
(1)转换成一行
(2)转换成一列
3)转换成2列
(3)转换成2列
(4)转换成两行
reshape的官方文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html
reshape(x, y),其中x表示转换后数组的行数,y表示转换后数组的列数。当x或者y为-1时,表示该元素随机分配,如reshape(2, -1)表示列数随机,行数为两行。
(5)三维数组的转换
格式:np.reshape((x, y, z))
参数的含义:
x:表示生成的三维数组中二维数组的个数
y:表示单个二维数组中一维数组的个数
z:表示三维数组的列数
例子:
4 若想返回全零一维矩阵
可以使用np.zeros(5),其中5表示元素个数为5。np.zeros([2 , 3])返回2行3列的全零矩阵。
5 若想产生单位矩阵
可以使用np.eye(5),5表示矩阵为5维矩阵
6 访问数组里面的元素,和python中的list访问方式是一样的。
7 若想访问多维数组里面的元素
或者
8 对二维数组进行切片操作
“:2”表示行:即从第0行开始到第2行(不包括第2行)结束的行的元素,“1:”表示从第1列到后面几列的元素。
9 多维数组降为一维
所用到的函数有:numpy的ravel() 和 flatten()函数
简介
首先声明两者所要实现的功能是一致的(将多维数组降位一维)。这点从两个单词的意也可以看出来,ravel(散开,解开),flatten(变平)。两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵,而numpy.ravel()返回的是视图(view,也颇有几分C/C++引用reference的意味),会影响(reflects)原始矩阵。
两者功能:
两者区别:
通过上面的程序可以发现flatten函数返回的是原数组的拷贝,不会改变原数组,而ravel()函数可以改变原数组内的数值。
10 numpy的dot函数的使用
dot()返回的是两个数组的点积(dot product)。
(1)如果处理的是一维数组,则得到的是两数组的內积
(2)2.如果是二维数组(矩阵)之间的运算,则得到的是矩阵积(mastrix product)。
所得到的数组中的每个元素为,第一个矩阵中与该元素行号相同的元素与第二个矩阵与该元素列号相同的元素,两两相乘后再求和。