导读
朋友们,在网上我们有时候可以看到那种双胞胎?测试默契度的挑战,一对双胞胎中间隔着一个屏风双方是看不到对方的。然后主持人随机让他们做出动作,比如说用手捂住一只眼睛或者用手比划出一个数字等,它们居然每次都能做出相同的动作。
同样的,在我们学习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
文章源自灵鲨社区-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看看。
看到没,它们在内存中的指向都是不一样的,所以呢,使用transpose()函数和T属性以后,都是在内存中进行新的创建。那么这两种方式到底有啥不同之处呢?
区别
首先,它们的自身定义不同,transpose它是一个函数?,T是一个数组的属性?。
它们的调用方式不同,函数是通过 numpy.transpose(a, axes=None) 来进行调用,它有两个参数,一个是数组参数a,另一个是ases轴。可分别对轴进行转置矩阵。
T它是数组的一个属性,调用的话,直接使用 数组.T 进行转置,不需要任何参数。
其次,关于轴,因为transpose是可以传递轴参数的,所以它可以对任意轴进行转置,而T只能将所有轴进行转置。
但是这并不代表T比较“死板”没有胜算呦!?咱们可以看看它们两个的效率。
明显T是略胜一筹的?,我们测试的数据只是少量的,假如千万条,亿条呢?它们的表现又该如何呢?
所以在以后项目使用的过程中,选择哪种方式进行转置矩阵是需要根据实际情况选择的。
选择正确的方法也是提升项目效率的一大关键,你们认为呢??!
评论