我正在嘗試呼叫預測函式為此我有以下代碼
def convert_to_df(obj):
obj_dic = obj.dict()
df = pd.DataFrame(obj_dic.values(), index=obj_dic.keys())
df.reset_index(drop=True, inplace=True)
return df
@app.get("/get_rating")
def get_rating(features: Features):
features = convert_to_df(features).T # shape (1, 26)
return {'rating': Predictor().predict(features)}
但我收到以下錯誤:
View.MemoryView.memoryview_cwrapper 中的檔案“stringsource”,第 658 行,View.MemoryView.memoryview 中的檔案“stringsource”,第 349 行。cinit ValueError: ndarray 不是 C 連續的
我該如何解決這個問題?
謝謝
編輯
Predictor 是一個帶有 scikit learn 的 knn 模型訓練器
def predict(self, features) -> int:
return self.model.predict(features)
uj5u.com熱心網友回復:
資料量和回溯資訊量仍然不夠。但我會猜測一下。
讓我們做一個簡單的資料框:
In [31]: df = pd.DataFrame(np.ones((3,4)))
In [32]: df
Out[32]:
0 1 2 3
0 1.0 1.0 1.0 1.0
1 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
predict可能使用一些期望c-contiguous資料的編譯代碼。如果給定一個資料框,它可能首先將其轉換為一個陣列,例如使用np.array(df)或有效:
In [35]: df.values
Out[35]:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
In [36]: df.values.flags
Out[36]:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
但是,如果您進行轉置,則連續性會發生變化。這是眾所周知的陣列,看起來熊貓是兼容的:
In [37]: df.T.values.flags
Out[37]:
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
pandas transpose允許我們指定副本 - 請參閱其檔案:
In [38]: df.transpose(copy=True).values.flags
Out[38]:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
所以在你的代碼中使用可能(???)解決問題:
features = convert_to_df(features).transpose(copy=True)
我不能強調你應該在你的問題中包含足夠的資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/497779.html
上一篇:洗掉二維陣列中的重復索引
