Python将np4d数组重塑为2D数组。卡格尔图像d

2024-10-01 04:49:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将4D数组转换为2D数组以使用sklearn SVM模型,但当我尝试使用模型中的数据时,它给了我一些问题。 所以我把数据分成训练和测试数据,然后把它转换成一个np数组。在

#Train data
npXt = np.array(x_train)
npYt = np.array(y_train)
#Eval test data
npXT = np.array(x_test)
npYT = np.array(y_test)

然后我看着这个形状

^{pr2}$

这给了我这个

(28709, 48, 48, 1)

我试图通过这样做来改变它

npXt.transpose((28709, 48, 48, 1)).reshape(np.prod(npXt.shape[:2]),-1)

但给出了这个错误。在

AxisError                                 Traceback (most recent call last)
<ipython-input-8-2682876229f4> in <module>()
----> 1 npXt.transpose((28709, 48, 48, 1)).reshape(np.prod(npXt.shape[:2]),-1)

AxisError: axis 28709 is out of bounds for array of dimension 4

我做错什么了?在

谢谢你的帮助

更新: 感谢您的所有建议: 我试过了,结果出现了这样一个错误:

ValueError: bad input shape (28709, 7)

所以这就是我要解决的问题。我认为问题是我目前没有重新构造数组。 所以我像这样下载数据,这样很好:

x_train, y_train, x_test, y_test = aiu.getKaggleData(file,numClass)

结果是:

Creating Testing and Training datasets
Filling datasets
Transforming data to fit model's needs
Normalizing traing/testing datasets
Reshaping data
28709 train samples
3589 test samples

我希望这个和这个和我建立的另一个模型一起工作。 接下来,我构建如下SVM模型:

clf = SVC(C=0.01, kernel='linear', decision_function_shape='ovo', probability=True) 

然后将训练和测试数据转换成np数组,如下所示

#Train data
npXt = np.array(x_train)
npYt = np.array(y_train)
#Eval test data
npXT = np.array(x_test)
npYT = np.array(y_test)

然后使用建议的方法

my_array = np.ones((28709, 48, 48, 1))
newXTrain = np.transpose( my_array ).reshape(np.prod(npXt.shape[:2]),-1)
print(newXTrain.shape)
print(npYt.shape)

这给了我这样一个结论:

(1378032, 48) #for data
(28709, 7)    #for lables

然后我试着像这样训练模特

clf.fit(newXTrain,npYt)

这给了我这个

 raise ValueError("bad input shape {0}".format(shape))
 ValueError: bad input shape (28709, 7)

谢谢你到目前为止的帮助

但我还是犯了个错误:

newXTrain = np.transpose( my_array ).reshape(np.prod(npXt.shape[:1]),-1)

这让我看起来很有希望。在

(28709, 2304)
(28709, 7)

但给出了与ValueError: bad input shape (28709, 7)相同的错误


Tags: 模型testinputdata错误nptrainprod
2条回答

我想这是你使用转置的方式。作为参数传递的应该是一个位置列表,在您的例子中是0到3之间的整数。在

我想您是在尝试反转npXt的索引,所以可能应该将(3,2,1,0)而不是(28709,48,48,1)作为转置函数的参数。在

我不明白你为什么要在整形之前转置数组 但是你使用转置错误的方式。在

它应该是:

my_array = np.ones((28709, 48, 48, 1))
np.transpose( my_array ).reshape(np.prod(npXt.shape[:2]),-1)

如果你把一个元组传递给转置函数,它将把它解释为矩阵轴的索引的新顺序。因此,调换轴号28709在这里没有意义。在

如果你想重塑你可能根本不需要转置

相关问题 更多 >