preface
先说一下导包的差别导致的调用的差别。
如果使用:import numpy as np
那么就只能用np.函数的形式来调用numpy中的函数;
import numpy as np
#生成一个array
#正确调用
#以下语句可以生成指定类型的array
#n = np.array([1,2,3],dtype=类型)
#生成float32类型的array
#n = np.array([1,2,3],dtype=‘float32’)
#n.dtype
n = np.array([1,2,3])
#错误使用
n1 = array([1,2,3])
但是如果from numpy import *就可以直接使用函数名来调用函数。
from numpy import *
#生成一个array
#正确调用
n = array([1,2,3])
#错误调用 这个应该很好理解,毕竟没有np这个变量
n1 = np.array([1,2,3])
Numpy
NumPy数组是一个多维数组对象,称为ndarray。关于NumPy数组它有两个特性:
(1)NumPy数组的下标从0开始。
(2)同一个NumPy数组中所有元素的类型必须是相同的。
array
关于array的操作,首先需要说明的是由于它存在在外部包,所以还要先导入numpy,详情见程序。需要说明的是两个array的‘*’并不是代表矩阵相乘,而是矩阵内对应元素相乘,要想实现矩阵乘法需要使用dot函数。当然要想实现矩阵的乘法还需要遵守矩阵乘法的规则,即对齐,如dot(m,n)m的列数要等于n的行数才行。另外array的size属性,返回的是array元素的个数,而ndim的属性返回的是array的维度,dtype属性返回的是存储元素的类型。而如果需要转置array可以使用 a.T来实现。对于数组中的元素是通过下标来访问的,可以通过方括号括起一个下标来访问数组中单一的一个元素,也可以以切片的形式访问数组中多个元素。
#定义一个array
#方法1
from numpy import *
nar_2 = array([1,2])
#方法2
#导入包
#import numpy as np
#nar = np.array([1,2])
prod = nar*nar
#要想使用dot必须用方法2的导包
prod_1 = dot(nar,nar)
#获取nar元素的个数
nar.size
#获取nar的维度
nar.ndim
nar_tran = nar.T
#访问数组元素
print(nar[0])
print(nar[:2])
matrix
在numpy中的特殊类型,是array的子类,有自己独特的地方。在matrix中‘*’和函数dot都表示矩阵的相乘,同样对于matrix的矩阵相乘也需要遵守对齐规则,这一点不要忘记。如果是要实现矩阵对应元素相乘就应该使用multiply函数,而对于两个matrix的除,‘/’则表示对应元素的相除。matrix同样也有size,ndim,dtype的属性,与array所述一样。
from numpy import *
#定义一个matrix
nmat = mat([[1,2],[3,4]])
n2 = mat([[1,2,3],[2,3,4]])
#这样会报错,未对齐时
result = dot(nmat,n2)
#矩阵的乘法
m_pro = nmat *nmat
pro_d = dot(nmat,nmat)
#矩阵对应元素相乘
pro_m = multiply(m,m)
matrix与array互相转化
from numpy import *
n = array([1,2,3,4])
type(n)
# 把 array转为matrix
n_m = asmatrix(n)
# 把matrix转为array
m = mat([[1,2],[2,3]])
type(m)
m_a = m.getA1()
type(m_a)