【Python教程】transpose函数别装了你的简写真是T吗?

零 Python教程评论58字数 1571阅读5分14秒阅读模式

导读

朋友们,在网上我们有时候可以看到那种双胞胎👬测试默契度的挑战,一对双胞胎中间隔着一个屏风双方是看不到对方的。然后主持人随机让他们做出动作,比如说用手捂住一只眼睛或者用手比划出一个数字等,它们居然每次都能做出相同的动作。

同样的,在我们学习NumPy库的时候,也有许多像双胞胎那样“有默契”的都能输出相同数组内容的函数,但是NumPy还是将他们定义为两种函数或者说是属性,为什么呢?既然输出结果一样为什么还要定义多种呢?显然肯定是有不一样的地方。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/15348.html

本篇文章对最近学习Numpy库中遇到的转置矩阵相关函数和属性做一个详细剖析。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/15348.html

悉知

众所周知,Numpy库是一个非常强大的库给我们提供了很多数组的操作函数,当然了,它是啥都不会落下的,对于矩阵的操作,也同样给我们提供了已经封装好了相关函数。这个跟我们在学校学的矩阵其实是一个意思。浅浅回忆一下,假如说一个X * Y矩阵什么意思?就是由X行和Y列元素排成的矩形阵列这就是矩阵。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/15348.html

image.png文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/15348.html

之前我们创建矩阵得手写,现在方便的多了,有了Numpy库给我们提供的函数那就容易的多了,需要创建什么矩阵,只要准备好参数调用函数,进行传参就行。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/15348.html

下面我们就对给我们提供的函数、属性等进行一个验证。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/15348.html

使用

我们是先创建一个数组,然后通过转置矩阵这么一个概念将数组转置成想要的矩阵。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/15348.html

numpy库给我们提供了两种转置矩阵的方式,一个是transpose()函数,另一个是T属性。 这边分别将测试这两种方式看看调用方式,输出结果又有什么区别?文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/15348.html

先来看一下相关实例代码:文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/15348.html

python

复制代码
# -*- coding: utf-8 -*-
"""
@Created on : 2024/5/27 9:48
@creator : er_nao
@File :numpy_31_矩阵库.py
@Description :
"""
import numpy as np
import numpy.matlib

# 转置数组

a = np.arange(12).reshape(3, 4)
print('原数组')
print(a)
print('\n')
print('使用.T属性结果')
print(a.T)
print('\n')
print('transpose()函数结果')
print(np.transpose(a))

# 结果:
# 原数组
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]
# 
# 
# 使用.T属性结果
# [[ 0  4  8]
#  [ 1  5  9]
#  [ 2  6 10]
#  [ 3  7 11]]
# 
# 
# transpose()函数结果
# [[ 0  4  8]
#  [ 1  5  9]
#  [ 2  6 10]
#  [ 3  7 11]]

调用成功以后,发现transpose()函数和T属性返回的结果是一样的🤗。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/15348.html

这里又抛出一个问题😲,它们对原数组是引用还是重新创建呢?我们在控制台打出它们的内存id看看。

image.png

看到没,它们在内存中的指向都是不一样的,所以呢,使用transpose()函数和T属性以后,都是在内存中进行新的创建。那么这两种方式到底有啥不同之处呢?

区别

首先,它们的自身定义不同,transpose它是一个函数🦄,T是一个数组的属性🐴。

它们的调用方式不同,函数是通过 numpy.transpose(a, axes=None) 来进行调用,它有两个参数,一个是数组参数a,另一个是ases轴。可分别对轴进行转置矩阵。

T它是数组的一个属性,调用的话,直接使用 数组.T 进行转置,不需要任何参数。

其次,关于轴,因为transpose是可以传递轴参数的,所以它可以对任意轴进行转置,而T只能将所有轴进行转置。

但是这并不代表T比较“死板”没有胜算呦!🙉咱们可以看看它们两个的效率。

image.png

明显T是略胜一筹的😎,我们测试的数据只是少量的,假如千万条,亿条呢?它们的表现又该如何呢?

所以在以后项目使用的过程中,选择哪种方式进行转置矩阵是需要根据实际情况选择的。

选择正确的方法也是提升项目效率的一大关键,你们认为呢🧐?!

零
  • 转载请务必保留本文链接:https://www.0s52.com/bcjc/pythonjc/15348.html
    本社区资源仅供用于学习和交流,请勿用于商业用途
    未经允许不得进行转载/复制/分享

发表评论