如果功能不在模块级别,如何将功能提交给Dask?

问题描述 投票:0回答:1

我在dask分布式系统中有稀疏矩阵。我想将其转换为数组并留在分布式系统中。我可以在本地计算机上执行以下操作:

from scipy.sparse import coo_matrix
coo_matrix((3, 4), dtype=np.int8).toarray()

这将返回一个数组。我试图转换稀疏矩阵,如下所示:

from scipy import sparse
# Some code here
#
#
my_sparse_matrix = sparse.coo_matrix((3, 4), dtype=np.int8)
my_sparse_matrix = client.scatter(my_sparse_matrix)  # Send to the distributed system
# submit conversion function (to the distributed system)
my_result = self.client.submit(sparse.csr_matrix.toarray, my_sparse_matrix)
client.gather(my_result)

返回此错误:

{AttributeError}_swap not found

而且我收到此错误,因为.toarray()不是模块级函数。如何解决此问题?

python-3.x scipy dask dask-distributed
1个回答
0
投票

您的代码可以正常工作,但是我相信您有一种类型:您应该使用适合于您要操作的对象的方法,但是您在csr_matrix调用中使用了submit而不是coo_matrix my_sparse_matrix引用了什么。以下作品:

>>> from scipy import sparse
>>> my_sparse_matrix = sparse.coo_matrix((3, 4), dtype=np.int8)
>>> my_sparse_matrix = client.scatter(my_sparse_matrix)
>>> my_result = client.submit(sparse.coo_matrix.toarray, my_sparse_matrix)
>>> client.gather(my_result)
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]], dtype=int8)

不幸的是,错误消息没有给您明显的原因,但是如果没有Dask,您会得到相同的消息:

>>> arr = sparse.coo_matrix((3, 4), dtype=np.int8)
>>> parse.csc_matrix.toarray(arr)
AttributeError: _swap not found
© www.soinside.com 2019 - 2024. All rights reserved.