【发布时间】:2015-02-02 21:00:55
【问题描述】:
我有 vstacked 图像数据,现在我希望将其拆分为训练和测试集。 但是如何初始化一个空的 numpy 数组以便开始 vstacking?
我的简化代码如下所示:
#k-fold the data
kf = cross_validation.KFold(n, n_folds=2)
fold = 0
for train_ind, test_ind in kf:
#Get the persons of k-fold
train_pers = unique[train_ind]
test_pers = unique[test_ind]
#Set train+test stack to empty
self.train_stack = type(self.pca_data[0])
self.test_stack = type(self.pca_data[0])
#For all test data
for data in range(len(self.pca_data)):
print(self.pca_pers[data])
if self.pca_pers[data] in train_pers:
#Add to train stack
self.train_stack = np.vstack((self.train_stack, self.pca_data[data]))
elif self.pca_pers[data] in test_pers:
#Add to test stack
self.test_stack = np.vstack((self.test_stack, self.pca_data[data]))
else:
#Something wrong
print(data)
sys.exit("Strange strange data")
fold += 1
这里的导入代码是:
#Set train+test stack to empty
self.train_stack = type(self.pca_data)
self.test_stack = type(self.pca_data)
和
#Add to train stack
self.train_stack = np.vstack((self.train_stack, self.pca_data[fold][data]))
self.pca_data 包含所有图像数据,这些数据必须分布在 self.train_stack 和 self.test_stack 上。我尝试了 type() 函数,但这似乎是错误的。我也尝试了 self.train_stack = [],但这会引发错误“ValueError:数组维度必须一致,除了 d_0”。如果我要使用 numpy.zeros,那么第一个堆栈是 0,我希望它在 vstacking 之前完全为空。
问题
初始化空 numpy 数组的正确方法是什么? (输入“numpy.ndarray”)
附言注意self.train_stack是循环的,所以if语句,for if变量不存在,第二次进入循环时不会重置变量。
变量
- self.pca_data: Shape(978, 20) Type(type 'numpy.ndarray')
- self.pca_pers: Shape(978, 1) Type(type 'numpy.ndarray')
- self.test_stack 和 self.train_stack 应该用于例如Shape(489, 20) 和 Shape(489, 20) 类似 self.pca_data
- 您可以忽略的其他变量
【问题讨论】:
-
请告诉我们哪些变量是标量,哪些是数组,哪些是数组的形状。