是否有将dask.array的每一行(或列)乘以向量元素的有效方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有将dask.array的每一行(或列)乘以向量元素的有效方法?相关的知识,希望对你有一定的参考价值。

我在dask中有一个(巨大的)2D数组,它不能容纳在内存中,并且需要将每列乘以相应数量的向量。也就是说,我想映射M(i,j)→x(i)* M(i,j)。

我认为没有任何方法可以直接修改元素。这在numpy中非常容易做到,但是看起来像乘快法则不允许以相同的方式进行。

我目前的计划是从向量中创建一个dask数组,并映射一个零矩阵(其大小与原始矩阵相同,以重复该向量块并将它们传回。)>

M = da.from_array( the_matix  , chunks = chunks )
x = da.from_array( the_vector , chunks = chunks ) 

def fn(x, block_id=None): 
   ret = x.blocks[ block_id[0] ].compute()
   ret = np.repeat( ret[:,np.newaxis] , M.shape[1] , axis = 1 )
   return ret

temp = da.zeros( chunks=M.chunks , shape=M.shape )
temp = temp.map_blocks( fn , dtype=float )
M = da.multiply( [ M , temp ] ) 

不过,这似乎效率极低,并且对于如此简单的任务涉及大量的RAM使用。有没有更简单的方法可以做到这一点?

我在dask中有一个(巨大的)2D数组,它不能容纳在内存中,并且需要将每列乘以相应数量的向量。也就是说,我想映射M(i,j)→x(i)* M(i,j)。我不认为有...

答案

像下面的例子那样行不通?

以上是关于是否有将dask.array的每一行(或列)乘以向量元素的有效方法?的主要内容,如果未能解决你的问题,请参考以下文章

是否有将谷歌文档转换为谷歌电子表格的功能?

从 Windows cmd 向 telnet 会话日志的每一行添加时间戳

是否有将函数应用于每对列的 R 函数?

如果该行或列包含 0,则将矩阵中的每个单元格设置为 0

力扣——翻转矩阵后的得分

861. 翻转矩阵后的得分