python中的张量运算(tensor)
张量(tensor)其实是离散数学中的概念,有着清晰严格的定义,不过也很深奥,这⾥我们仅从程序员的⾓度简单理解⼀下。⽐如单个数字可以看做是0阶张量,⼀维数组就是1阶张量,⼆维数组(矩阵)就是2阶张量,依此类推。可以发现,张量是由⼀定规的数据集,有很好的抽象能⼒,能很好的刻画对象。⽐如对于个⼈,健康指标可以⽤0~1来表⽰,为0阶张量。健康状态可以⽤数组表⽰,分别为体重指标,⾝⾼指标,肺活量指标等,为1阶张量,还可以再加⼊纵轴,⽐如年龄,性别等,构成健康图谱,成为2阶张量。
random在python中的意思  好了,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中的数学计算问题:
⽐如都有p()和p()函数等,但是做数据分析时⼀般都⽤numpy⾃带的数学函数,更专业
参考资料:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。