为了账号安全,请及时绑定邮箱和手机立即绑定

IPython.parallel ValueError:无法从内存缓冲区创建对象数组

IPython.parallel ValueError:无法从内存缓冲区创建对象数组

炎炎设计 2021-03-12 14:08:47
我正在尝试编写一个要在多个IPython引擎中执行的函数。该函数以pandas系列作为参数。Series的每个元素都是一个字符串,整个Series构成TF.IDF计算的语料库。阅读IPython并行文档和一些教程之后,这似乎很简单,我想到了以下内容:import pandas as pdfrom IPython.parallel import Clientdef calculemus(corpus):    from sklearn.feature_extraction.text import TfidfVectorizer    vectorizer = TfidfVectorizer(min_df=1, stop_words='english')    return vectorizer.fit_transform(corpus)review = pd.read_csv('review.csv')['text']review = review.fillna('')client = Client()r = client[-1].apply(calculemus, review).get()但是我却得到了这个错误:---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)/xxx/site-packages/IPython/zmq/serialize.pyc in unpack_apply_message(bufs, g, copy)    154                     sa.data = m.bytes    155 --> 156     args = uncanSequence(map(unserialize, sargs), g)    157     kwargs = {}    158     for k in sorted(skwargs.iterkeys()):/xxx/site-packages/IPython/utils/newserialized.pyc in unserialize(serialized)    175     176 def unserialize(serialized):--> 177     return UnSerializeIt(serialized).getObject()/xxx/site-packages/IPython/utils/newserialized.pyc in getObject(self)    159                 buf = self.serialized.getData()    160                 if isinstance(buf, (bytes, buffer, memoryview)):--> 161                     result = numpy.frombuffer(buf, dtype = self.serialized.metadata['dtype'])    162                 else:    163                     raise TypeError("Expected bytes or buffer/memoryview, but got %r"%type(buf))ValueError: cannot create an OBJECT array from memory buffer我不确定是什么问题,有人可以启发我吗?
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

这是IPython 0.13中的错误,应在master中修复。序列化numpy数组有一种特殊情况,可避免复制数据,并且此行为由isinstance(numpy.ndarray)检查触发。这是不恰当的,因为isinstance捕获的子类,其中包括大熊猫对象,但那些大熊猫对象(和阵列的子类中一般)应以同样的方式进行处理,作为元数据会丢失,并且在另一侧上重建往往会失败。

PS:

r = client[-1].apply(calculemus, np.array(review, dtype=str)).get()

相当于

r = client[-1].apply_sync(calculemus, np.array(review, dtype=str))


查看完整回答
反对 回复 2021-03-31
  • 1 回答
  • 0 关注
  • 287 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信