微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 dask 中广播和调整数组大小

如何解决在 dask 中广播和调整数组大小

我想广播一个一维 dask 数组和一个二维 dask 数组。

具体来说,使用 numpy 应该是这样的:

a = np.random.rand(20000,3)
b = np.random.rand(16)

我想要一个大小为 (20000,16,3) 的 3D 数组,我们称之为 c。因此,对于 b 的每个值,我们将有 (20000,3) 个值乘以 a*b[index],其中 index=0,1,...,15。在 numpy 中,使用函数调整大小非常简单。但是,在 dask 中不存在调整大小。任何人都知道我如何在 dask 上做到这一点?该数组也可以是带有 dask 数组的 xarray,因此如果有人知道如何使用 xarray 进行操作,也将不胜感激。

干杯

解决方法

如果我正确理解你的问题,你想达到这个结果

import numpy as np

a = np.random.rand(20000,3)
b = np.random.rand(16)

result = a[:,np.newaxis,:] * b[np.newaxis,:,np.newaxis]
result.shape  # (20000,16,3)

该代码也直接适用于 dask.array

import dask.array as da

dsk_a = da.from_array(a)
dsk_b = da.from_array(b)

result_dask = dsk_a[:,:] * dsk_b[np.newaxis,np.newaxis]

result_dask.shape  # (20000,3)
(result_dask.compute() == result).all()  # True

如果我误解了您的问题,请告诉我。如果我有,那么如果您提供可提供所需结果的有效 numpy 代码会很有帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。