我在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()
不是模块级函数。如何解决此问题?
您的代码可以正常工作,但是我相信您有一种类型:您应该使用适合于您要操作的对象的方法,但是您在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