用python的numpy创建一个矩阵

Python014

用python的numpy创建一个矩阵,第1张

使用numpy创建矩阵有2种方法,一种是使用numpy库的matrix直接创建,另一种则是使用array来创建。首先加载numpy库,然后分别用上面说的2种方法来分别构建一个4×3的矩阵,如图

请点击输入图片描述

2

矩阵创建好了,大家看到了2个矩阵长得差不多,是否相等呢?我们用==(python中用==表示等于)来试试看看,如下图

请点击输入图片描述

3

我们下面看看2个矩阵相乘的结果,可以看到使用matrix创建的矩阵m1乘以自身,结果报错了:因为矩阵相乘需要满足一定的条件[1];而使用array创建的矩阵m2乘以自身,结果并没有报错,因为这里用的是Hadamard乘法[2]而m1×m2也报错了,说明只要有一个是matrix,就不能用Hadamard乘法,如图所示

请点击输入图片描述

请点击输入图片描述

请点击输入图片描述

4

下面看几个特殊矩阵[3]:使用np.zeros可以生成零矩阵,使用np.ones可以生成1矩阵,使用np.identity可以生成单位矩阵,使用np.diag可以生成对角矩阵,如图所示

请点击输入图片描述

请点击输入图片描述

5

最后看看矩阵的行向量和列向量提取方法。例如m1[[0,3]]表示提取矩阵m1的第0行和第3行[4],当然也可以用m1[[True,False,False,True]]来达到同样的效果,True就是表示对应的行要提取;而m1[:,[-2,-1]]则是提取矩阵的最后2列的列向量,m1[:,[False,True,True]]的一样可以提取最后2列的列向量,如图所示

请点击输入图片描述

请点击输入图片描述

END

注意事项

[1]在高等数学或者线性代数等已经学过了当后面的矩阵的行数等于前面矩阵的列数时,2个矩阵才可以相乘

[2]Hadamard指的是2个m×n的矩阵相乘,结果仍然是m×n的矩阵,结果为对应元素的乘积

[3]单位矩阵是特殊的对角矩阵,零(1)矩阵是指元素全部是0(1)的矩阵

[4]矩阵的第一行是从0开始编号的,python中的各种编号基本上都是从0开始的

可能我很快回答不了你的问题。还需要细细回味一下。

但是我觉得你的问题是一个比较明显的短文本聚类问题,这个问题应该在国际上都是比较难的吧。

如果还涉及到中文,中文的相关处理又不能照抄英文短文本聚类的方法,相关资料更加少了。

我倒是建议你 多看一些短文本聚类相关的文章。

问题一:技术上python矩阵表示的话:你可以使用python包,如下:

from numpy import matrix

A = matrix( [[1,2,3],[11,12,13],[21,22,23]])

这样你需要额外规定化:行i表示文档编号i的文档,列j表示词j出现次数,A[i][j]表示在文档i中词j的出现频率

或者

如同那篇文章所说的采用dict表示法:A = [{'额外':1},{'每天':1,'回帖':1},......]表示整个文档集合。

问题二:如同这样的问题本质一样,短文本聚类是否还适合传统的分词,去除副词...等处理步骤,

如何选择合适的模型来表示这类问题,我觉得你还是参考一些这方面的文章,最好中文的。

比如现在很火的微博,也会有好多的人尝试对其中成干上万评论进行聚类。很多进行二类或者三类聚类/分类:支持-中立-反对。

论坛的评论应该很早以前就有研究聚类/分类.我觉得去那里参考会更好.如果不是特别面向指定目的的聚类,我觉得采用一些使用宽泛的方法就行了。感觉结果不会很好。

问题三:EM算法感觉像纯数学的东西,学术功底不够深,我也不好发表看法。

感觉这个问题的本质已经超出我的知识范畴。最简单文档聚类无非:分词-文本预处理[同义词之类]-文档与词计频矩阵表示-(TF-IDF预处理)-kmeans跑起来-输出结果.