首页 > 解决方案 > numpy 数组和 numpy 向量之间的区别

问题描述

我想知道这两行代码的区别

 X_train = training_dataset.iloc[:, 1].values
 X_train = training_dataset.iloc[:, 1:2].values

我的猜测是后者是一个二维 numpy 数组,而前者是一个一维 numpy 数组。对于神经网络中的输入,后者是输入数据的正确方式,是否有具体原因?

请帮忙!

标签: pythonnumpy

解决方案


不同之处在于 iloc 返回一个带有单行或单列的系列,但一个具有多行或多列范围引用的数据框

虽然它们都引用第 1 列,但 1 和 1:2 是不同的类型,1 表示 int,1:2 表示 slice。

和,

X_train = training_dataset.iloc[:, 1].values

您指定单个列,因此 training_dataset.iloc[:, 1] 是 Pandas 系列,因此 .values 是一维 Numpy 数组

与,

X_train = training_dataset.iloc[:, 1:2].values

虽然它变成了一列,但 [1:2] 是一个切片,您表示一个列范围,因此 training_dataset.iloc[:, 1:2] 是一个 Pandas 数据框。因此, .values 是一个 2D Numpy 数组

测试如下:

创建 training_dataset 数据框

data = {'Height':[1, 14, 2, 1, 5], 'Width':[15, 25, 2, 20, 27]} 
training_dataset = pd.DataFrame(data)

使用 .iloc[:, 1]

print(type(training_dataset.iloc[:, 1]))
print(training_dataset.iloc[:, 1].values)

# Result is: 
<class 'pandas.core.series.Series'>
# Values returns a 1D Numpy array
0    15
1    25
2     2
3    20
4    27
Name: Width, dtype: int64, 

使用 iloc[:, 1:2]

print(type(training_dataset.iloc[:, 1:2]))
print(training_dataset.iloc[:, 1:2].values)
# Result is: 
<class 'pandas.core.frame.DataFrame'>
# Values is a 2D Numpy array (since values of Pandas Dataframe)
[[15]
 [25]
 [ 2]
 [20]
 [27]], 
X_train Values Var Type <class 'numpy.ndarray'>

推荐阅读