Различия между X и X.T

#python #arrays #numpy #matplotlib

#python #массивы #numpy #matplotlib

Вопрос:

У меня есть некоторый код здесь:

 import numpy as np 
import matplotlib.pyplot as plt 

#height (cm)
X = np.array([[147, 150, 153, 158, 163, 165, 168, 170, 173, 175, 178, 180, 183]])
print(X.T)
print("=======================")
print(X)
  

Кто-нибудь может объяснить мне, что означает T и различия между X и X.T?

Комментарии:

1. Xt — это транспонирование матрицы.

Ответ №1:

Это .T атрибут numpy array, который транспонирует массив.

Ответ №2:

Существенные различия видны в атрибутах shape and strides :

 In [64]: X = np.array([[1,2,3,4]])
In [65]: X
Out[65]: array([[1, 2, 3, 4]])
In [66]: X.T
Out[66]: 
array([[1],
       [2],
       [3],
       [4]])
In [67]: X.shape
Out[67]: (1, 4)
In [68]: X.T.shape
Out[68]: (4, 1)
In [69]: X.strides
Out[69]: (32, 8)
In [70]: X.T.strides
Out[70]: (8, 32)
  

Комментарии:

1. Итак, каков вывод?

2. Я не думаю, что должны быть «выводы». Все остальные просто называют это транспонированием. Но мои цифры показывают, что на самом деле происходит в numpy — он делает a view с разной формой и шагами.

Ответ №3:

.T Атрибут возвращает транспонирование массива. Обратите внимание, что в вашем случае вы объявили почти вектор (реальный вектор был бы одномерным, но в вашем случае у вас есть два измерения из-за использования двойных скобок [[]] в определении x):

 import numpy as np
x = np.array([[147, 150, 153, 158, 163, 165, 168, 170, 173, 175, 178, 180]])
print("Line vector:")
print(x)
print("Column vector:")
print(x.T)
  
 Line vector:
[[147 150 153 158 163 165 168 170 173 175 178 180]]
Column vector:
[[147]
 [150]
 [153]
 [158]
 [163]
 [165]
 [168]
 [170]
 [173]
 [175]
 [178]
 [180]]
  

Обратите внимание, что в этом случае нет необходимости использовать двойные квадратные скобки [[]] . Если вы определяете x с помощью одиночных скобок, транспонирование не отличается (потому что нет измерения для транспонирования):

 import numpy as np
x = np.array([147, 150, 153, 158, 163, 165, 168, 170, 173, 175, 178, 180])
print("Line vector:")
print(x)
print("Column vector:")
print(x.T)
  
 Line vector:
[147 150 153 158 163 165 168 170 173 175 178 180]
Column vector:
[147 150 153 158 163 165 168 170 173 175 178 180]