python中的张量运算(tensor)
张量(tensor)其实是离散数学中的概念,有着清晰严格的定义,不过也很深奥,这里我们仅从程序员的角度简单理解一下。比如单个数字可以看做是0阶张量,一维数组就是1阶张量,二维数组(矩阵)就是2阶张量,依此类推。可以发现,张量是由一定规的数据集,有很好的抽象能力,能很好的刻画对象。比如对于个人,健康指标可以用0~1来表示,为0阶张量。健康状态可以用数组表示,分别为体重指标,身高指标,肺活量指标等,为1阶张量,还可以再加入纵轴,比如年龄,性别等,构成健康图谱,成为2阶张量。
好了,numpy就是python中处理n-demensional array, 也就是ndarray,非常方便,而ndarray在和tensorflow的tensor大同小异,可以相互转换,在这里可以统称为张量。那么如何计算张量的形状呢?
1 2 3 | 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的方式访问等价:
1 2 3 4 5 | 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自带的数学函数,更专业
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?