学习神经网络的时候经常被一个概念混淆,今天终于算是进一步理解。记录一下。
无论是在python里的numpy,还是各种框架里的tensor,
数组就是一个数组而已,不等同于行向量或者列向量。
但是它有转化成行/列向量的潜质(通过特定函数如unsqueeze增加维度)。
举个例子
import torch
x1 = torch.Tensor([1, 2, 3, 4, 5])
x2 = torch.unsqueeze(x1, dim=1)
# 打印x1,x2的size
print(x1.size()) # torch.Size([5])
print(x2.size()) # torch.Size([5, 1])
需要理解, (5) != (5, 1) != (1, 5)
补充
用numpy补充说明:
import numpy as np
A = np.array([1, 2, 3])
B = np.array([[1, 2, 3]])
C = np.array([[1], [2], [3]])
print(A) # [1 2 3]
print(A.shape) # (3,)
print(B) # [[1 2 3]]
print(B.shape) # (1, 3)
print(C)
# [[1]
# [2]
# [3]]
print(C.shape) # (3, 1)
特别注意⚠️
- [1, 2, 3] != [[1, 2, 3]]
前者是数组/序列,后者是1X3的矩阵/向量。