python中numpy库matrix和array的融合使用

时间:2022-10-21 21:24:41

今天照书写程序的时候发现,有一个地方把[[],[],[]]变成了array,但是我不知道为什么不变成matrix。我就试着改了一下。

def testingNb():
#生产数据
listOPosts,listClasses=loadDataSet()
#生成字典
myVocabList=createVocabList(listOPosts)
trainMat=[]
#求出数据矩阵
for postinDoc in listOPosts:
trainMat.append(setOfWords2Vec(myVocabList,postinDoc))
#求出需要的参数
p0V,p1V,pAb=trainNB0(mat(trainMat),array(listClasses))
testEntry=['love','my','dalmation']

上面倒数第二行,本来是array(),但是我给改成了mat,报错了。在另外一个地方用的时候。
numWords=len(trainMatrix[0])
按说matrix和array一样都是二维的,取0元素后肯定是可以求出来的,但是不行。打印一看,原来len()里面成了[[]]。这样每次求len得到的都是1.那样我就直接用下面的方法喽

numWords=shape(trainMatrix)[1]
但是始终避不开,在下面的代码中又出错了,

 p0Num=ones(numWords);p1Num=ones(numWords)
print p0Num
p0Denom=2.0;p1Denom=2.0
#统计正面的数量和反面的数量
for i in range(numTrainDocs):
if trainCategory[i]==1:
print trainMatrix[i][0]
p1Num+=trainMatrix[i]#在这里直接加不行
p1Denom+=sum(trainMatrix[i])
else:
print trainMatrix[i]
p0Num+=array(trainMatrix[i])[0]#这是修改后的
p0Denom+=sum(trainMatrix[i])
上面是原来的代码,直接加肯定不行啊。一个是[ ],一个是[[ ]]。先用array()函数转化一下,再取第一个值,这样就可以轻松的不用愁matrix了。

即使是这样,还是优先使用array,毕竟array包含matrix。大部分工作都可以做。

.........................................................................................................................................

今天又发现了一个numpy中mat和array的区别:取矩阵的一列

先贴代码

>>> a=zeros((5,3))
>>> a
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
>>> a[:,1]
array([ 0., 0., 0., 0., 0.])
>>> mat(a)[:,1]
matrix([[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.]])
取完一列后,array和mat明显不一样。array明显的是我们要的结果。那么怎么来转化呢,如果真的是用了mat

>>> mat(a)[:,1].flatten().A[0]
array([ 0., 0., 0., 0., 0.])
flatten()函数是将这些元素都给拍扁了,挤到了一个元素里面。