python中的张量运算(tensor)

      张量(tensor)其实是离散数学中的概念,有着清晰严格的定义,不过也很深奥,这里我们仅从程序员的角度简单理解一下。比如单个数字可以看做是0阶张量,一维数组就是1阶张量,二维数组(矩阵)就是2阶张量,依此类推。可以发现,张量是由一定规的数据集,有很好的抽象能力,能很好的刻画对象。比如对于个人,健康指标可以用0~1来表示,为0阶张量。健康状态可以用数组表示,分别为体重指标,身高指标,肺活量指标等,为1阶张量,还可以再加入纵轴,比如年龄,性别等,构成健康图谱,成为2阶张量。

  好了,numpy就是python中处理n-demensional array, 也就是ndarray,非常方便,而ndarray在和tensorflow的tensor大同小异,可以相互转换,在这里可以统称为张量。那么如何计算张量的形状呢?

 

tensor = [[12,2,2,3],
 [4,34,54,34]   
]

 

  比如上图,tensor是4*2张量,还是2*4呢?也即写成shape=[4,2],还是[2,4],是不是都可以,还是只有一种合理的方法?这和我们访问多维数组的习惯有很大的关系,比如在for循环中,我们都是从最外层开始访问的,那么最外层的就应该是shape的第一位

for (let arr in tensor){
    for(let a in arr){
         print(a);  
    }      
}  

    和用shape的方式访问等价:

for( let i=0;i++;i<shape[0]){
     for(let j=0;i++;j<shape[1]){
               print(tensor[i][j]);
          }      
}    

  所以其形状为2*4。在计算张量的形状时,可以把张量看成数组的嵌套,从外到里访问,分别是shape的1维,2维,...n维。

 

下面我们看下其api的使用。

1、就像0和其他自然数有很大不同,0阶张量和n阶张量(n>0)的api也有很大区别,比如下面。

    • np.max:(a, axis=None, out=None, keepdims=False) 
      • 求序列的最值
      • 最少接收一个参数
      • axis:默认为列向(也即 axis=0),axis = 1 时为行方向的最值;
    • np.maximum:(X, Y, out=None) 
      • X 与 Y 逐位比较取其大者;
      • 最少接收两个参数

2、张量元素的迭代器

  在python中,创建一个一维数组的迭代器是非常简单的,使用也很简单,但是在对于多维,就有很多参数,如下

        it=np.nditer(a,flags=['multi_index'],op_flags=['readwrite'])

     这句话看起来不好理解,我们来仔细研究下。

   flags=['multi_index']表示对a进行多重索引,具体解释看下面的代码。
     op_flags=['readwrite']示不仅可以对a进行read(读取),还可以write(写入),即相当于在创建这个迭代器的时候,我们就规定好了有哪些权限。

3、张量的卷积运算

   从二维张量(矩阵)的角度看,张量的卷积运算是对dot product和cross运算的一种推广,对两个矩阵的形状没有那么严格的要求,可以试想两个平面运算,两个方块运算。

4、numpy.pad填充函数:

   看这篇博客,写的很详细,有案例,

5、张量中的切片操作:

   x1=np.random.rand(3,4,5)

   x2 =x1[:,2,:]:确定了第二个轴的坐标,没有用冒号代替,意思就是全选,则x2,shape=(3,5),就相当于在面包上切片,非常方便。

7,ndarray的方法和属性

   Numpy中主要处理ndarray,当我们把处理好的数据集变成ndarray后,那它将拥有哪些方法和函数呢?比如最常见的shape和reshape(),transpose()。这些可以分为描述信息和统计信息两大类吧,比如mean(),std(),还有很多api,可以去看下官方文档

8、python标准库中的math和numpy中的数学计算问题:

      比如都有math.exp()和numpy.exp()函数等,但是做数据分析时一般都用numpy自带的数学函数,更专业

参考资料:

 numpy官方参考文档

 

posted @ 2018-11-02 19:46  懂得了才能做一些改变  阅读(22829)  评论(1编辑  收藏  举报