对于Numpy数组,".T"是什么意思?

90
我在SciPy文档中看到了这个例子:
x, y = np.random.multivariate_normal(mean, cov, 5000).T

这里的最后一个.T实际上起到了什么作用?

11
解答:使用引号将其括起来是在 Google 中查找此内容的秘诀。当然,当我搜索时,我得到了这个页面! - Kallaste
希望这篇文章能够帮助到其他遇到类似问题的人。但是,.T会反转轴的顺序,而不是交换最后两个轴。这意味着如果你的数组x是三维的,那么x.Tx.transpose((2, 1, 0))是相同的。如果你想要交换最后两个轴,在这种情况下,你需要使用x.transpose((0, 2, 1)) - Hameer Abbasi
3个回答

96
.T访问对象的属性T,该属性恰好是NumPy数组的转置。属性T是该数组的转置,详见文档
显然,您正在平面上创建随机坐标。 multivariate_normal()的输出可能如下所示:
>>> np.random.multivariate_normal([0, 0], [[1, 0], [0, 1]], 5)  
array([[ 0.59589335,  0.97741328],
       [-0.58597307,  0.56733234],
       [-0.69164572,  0.17840394],
       [-0.24992978, -2.57494471],
       [ 0.38896689,  0.82221377]])

这个矩阵的转置是:
array([[ 0.59589335, -0.58597307, -0.69164572, -0.24992978,  0.38896689],
       [ 0.97741328,  0.56733234,  0.17840394, -2.57494471,  0.82221377]])

通过序列解包,可以方便地将其分成xy两个部分。


我想知道 .T 属性是如何更新的……每当数组中的某些内容发生变化时,self.T 中存储的 transpose(self) 的结果是否会被更新?我想不会,但我不知道如何实现这样一个属性,只有在需要时才进行计算。 - Max
1
@Max T 是一个描述符。你可以把它想象成每次访问.T时调用的函数。另外请注意,转置只是对原始数组相同数据的一种不同步长的视图。因此,如果您执行b = a.T,然后更改a中的项目,则b中对应的项目也会更改。 - Sven Marnach

13

.T就是np.transpose()的简写。祝你好运。


2
这并不是完整的情况。如果矩阵的维度少于2,则返回原始矩阵。因此,它是具有一种运行时安全性的转置函数。 - IsakBosman

2

示例

import numpy as np
a = [[1, 2, 3]]
b = np.array(a).T  # ndarray.T The transposed array. [[1,2,3]] -> [[1][2][3]]
print("a=", a, "\nb=", b)
for i in range(3):
    print(" a=", a[0][i])  # prints  1 2 3
for i in range(3):
    print(" b=", b[i][0])  # prints  1 2 3 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接