为什么转置不改变数组?

时间:2019-10-25 22:24:23

标签: python numpy

y = np.array([1, 1, 0, 0])
print("Y 1:", y)
y = y.T

print("Y 2:", y)

两者打印相同:

[1,1,0,0]

numpy数组a = [1,1,0,0]的形状为[4,],而b= [[1,1,0,0]]的形状为[1,4]。我可以说a是向量,b是矩阵。因此,转置操作不适用于矢量,因此两个打印件是相同的。

2 个答案:

答案 0 :(得分:2)

从文档here中可以看到,转置一维数组将返回原始数组的不变视图。在您的情况下,y是一维数组,因此转置输出将保持不变。

答案 1 :(得分:1)

numpy将1d“向量”与2d“行向量”和“列向量”区分开。通常使用类似的方法在它们之间切换:

# create 1d vector
v = np.array([1, 1, 0, 0])

# row vector
rv = v[np.newaxis, :]

# column vector
cv = v[:, np.newaxis]

请注意np.newaxis is defined to be None,因此您经常会看到这样写的内容,例如v[:,None],并且因为需要列向量是一种常见的操作,所以np.c_[v]这样的速记方式难以理解

现在rvcv是二维的,它们可以像您期望的那样transposed

切换回一维向量的方法类似:

# from row vector
v = rv[0, :]

# from column vector
v = cv[:, 0]