首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dask直方图来自zarr文件(一个很大的zarr文件)

dask直方图来自zarr文件(一个很大的zarr文件)
EN

Stack Overflow用户
提问于 2020-01-29 00:57:10
回答 2查看 266关注 0票数 1

所以我的问题是,我有一个很大的3dim数组,它的大小是#zarr文件的100 as (该数组的大小是它的两倍多)。我试着使用#Dask中的直方图来计算,但是我得到一个错误,说它不能这样做,因为文件在元组中有元组。我猜这是zarr文件的格式,而不是其他任何东西?

有什么想法吗?

编辑:是的,更大的计算机实际上不会工作……

我在一台机器上运行一个dask客户端,它运行了计算,但是在某个地方被卡住了。

我刚刚在整个文件中尝试了dask.map函数,但当我将其打印出来时,得到的结果如下所示:

代码语言:javascript
复制
ValueError: setting an array element with a sequence.

下面是脚本的一个版本:

代码语言:javascript
复制
def histo(img):
    return da.histogram(img, bins=255, range=[0, 255])

histo_1 = da.map_blocks(histo, fimg)

实际上,我将尝试在map函数之外使用它。我想知道,不是map函数,而是map块的窗口,实际上导致了这个问题。好吧,我会让你知道,如果它是或现在....

编辑2

因此,我尝试按照建议删除map块函数,结果如下:

代码语言:javascript
复制
[in] h, bins =da.histogram(fused_crop, bins=255, range=[0, 255])

[in] bins
[out] array([  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.,
        11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.,  20.,  21.,
        22.,  23.,  24.,  25.,  26.,  27.,  28.,  29.,  30.,  31.,  32.,
        33.,  34.,  35.,  36.,  37.,  38.,  39.,  40.,  41.,  42.,  43.,
        44.,  45.,  46.,  47.,  48.,  49.,  50.,  51.,  52.,  53.,  54.,
        55.,  56.,  57.,  58.,  59.,  60.,  61.,  62.,  63.,  64.,  65.,
        66.,  67.,  68.,  69.,  70.,  71.,  72.,  73.,  74.,  75.,  76.,
        77.,  78.,  79.,  80.,  81.,  82.,  83.,  84.,  85.,  86.,  87.,
        88.,  89.,  90.,  91.,  92.,  93.,  94.,  95.,  96.,  97.,  98.,
        99., 100., 101., 102., 103., 104., 105., 106., 107., 108., 109.,
       110., 111., 112., 113., 114., 115., 116., 117., 118., 119., 120.,
       121., 122., 123., 124., 125., 126., 127., 128., 129., 130., 131.,
       132., 133., 134., 135., 136., 137., 138., 139., 140., 141., 142.,
       143., 144., 145., 146., 147., 148., 149., 150., 151., 152., 153.,
       154., 155., 156., 157., 158., 159., 160., 161., 162., 163., 164.,
       165., 166., 167., 168., 169., 170., 171., 172., 173., 174., 175.,
       176., 177., 178., 179., 180., 181., 182., 183., 184., 185., 186.,
       187., 188., 189., 190., 191., 192., 193., 194., 195., 196., 197.,
       198., 199., 200., 201., 202., 203., 204., 205., 206., 207., 208.,
       209., 210., 211., 212., 213., 214., 215., 216., 217., 218., 219.,
       220., 221., 222., 223., 224., 225., 226., 227., 228., 229., 230.,
       231., 232., 233., 234., 235., 236., 237., 238., 239., 240., 241.,
       242., 243., 244., 245., 246., 247., 248., 249., 250., 251., 252.,
       253., 254., 255.])

[in] h.compute
[out] <bound method DaskMethodsMixin.compute of dask.array<sum-aggregate, shape=(255,), dtype=int64, chunksize=(255,), chunktype=numpy.ndarray>>

我将在另一个笔记本中尝试,看看它是否仍然发生。

编辑3

这是奇怪的事情,但如果我只是声明变量h,它是作为dask数组中的一个小元素出现的?

编辑

奇怪的是,如果我调用xarray.hist或da.hist函数,它们都会失效。如果我使用skimage.exposure.histogram,它可以工作,但似乎zarr文件是在计算直方图之前解压的。这有点问题..。

更新2020年6月7日(针对不大但令人讨厌的中等数据的解决方案)请参见下面的答案。

EN

回答 2

Stack Overflow用户

发布于 2020-01-29 01:56:02

您可能希望使用dask's function而不是map_blocks。对于后者,Dask希望每个调用的输出与输入块的大小相同,或者是从输入块派生的形状,而不是直方图的一维固定大小输出。

代码语言:javascript
复制
h, bins =da.histogram(fused_crop, bins=255, range=[0, 255])
h.compute()
票数 3
EN

Stack Overflow用户

发布于 2020-06-07 22:49:39

更新2020年6月7日(针对不大但令人讨厌的中等数据的解决方案):

所以不幸的是,这段时间我有点不舒服,我花了一段时间才感觉好一点。然后大流行发生了,我要全职照看孩子。我尝试了很多不同的选项,最终,看起来是这样的:

1)如果只使用x.compute,内存很快就会被填满。

2)使用分布式将使硬盘充满溢出到磁盘的空间,并花费数小时,但会挂起和崩溃,并且不执行because...it将计算的任何操作(我在这里猜测,但基于图形和dask api)它将为每个块创建一个子直方图数组……这一切都需要在某个时候进行合并。

3)我的数据分块不是最优的,所以任务数量很大,但即使这样,当我改进分块时,我也不能计算直方图。

最后,我寻找了一种动态更新直方图数据的方法。所以我使用Zarr来做,通过计算它。因为它允许conccurrent读取和写入函数。提醒一下:我的数据是一个3DIMx,y,z的zarr数组,未压缩的300 in,但压缩后大约是100 in。在我4岁的旧笔记本电脑上,有16 of的内存,使用以下命令工作(我应该说我的数据是16位无符号的:

代码语言:javascript
复制
imgs = da.from_zarr(.....)

imgs2 = imgs.rechunk((a,b,c)) ## individual chunk dim per dim

h, bins = da.histogram(imgs2, bins = 255, range=[0, 65535]) # binning to 256 

h_out = da.to_zarr(h, "histogram.zarr")

我在进程旁边运行进度条,并从文件the中获取直方图:

代码语言:javascript
复制
[########################################] | 100% Completed | 18min 47.3s

对于300 is的阵列,我认为这并不是太糟糕。希望这对其他人也有帮助,感谢今年早些时候@mdurant的帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59953593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档