gpt4 book ai didi

python - 从行向量的迭代器构建一个大的 dask-backed xarray

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:29 24 4
gpt4 key购买 nike

如何从行向量的迭代器构建 xarray。生成的数组可能比内存大,并将由 dask 数组支持。行向量还带有唯一标签,这些标签需要成为生成的 xarray 的行索引。在文档中,我只看到一个构造函数以内存中的 numpy 数组开头。

一个示例用例是将 word embedding model 存储为 xarray,并将单词作为行标签。这些模型通常提供一个迭代器,用于生成词汇表中所有单词的 (string, vector) 对。大多数模型都有 100 多个维度,词汇表中通常有 ~10^6 个单词。我想将向量堆叠成一个矩阵,以便执行线性代数运算,并且还能够按字符串查找行。

我希望能够写出类似这样的东西:

import numpy as np
import xarray as xr

vectors = (('V'+str(i), np.random.randn(10000)) for i in range(10**9))
xray = xarray_from_iter(vectors)
xray.to_parquet('big_xarray.parquet')
row1234567 = xray['V1234567']

xarray 是否提供类似xarray_from_iter 的东西?如果不是我怎么写呢?xarray_from_iter 应该像 numpy.fromiter除了它还应该标记行。它还需要延迟计算直到调用转储,因为整个问题是该数组大于内存。

最佳答案

TLDR; xarray 没有 from 迭代器构造函数。您必须自己构建 dask 阵列。

此外,xarray 没有 to_parquet 方法,因此(目前)您无法执行此操作。

这是一个示例,说明如何为您的用例构建 dask 数组(和 xarray.DataArray):

import dask.array
import xarray as xr
import numpy as np

num = 10

names = []
arrays = []
for i in range(num):
names.append('V'+str(i))
arrays.append(dask.array.random.random(10000, chunks=(1000,)))

da = xr.DataArray(data, dims=('model', 'sample'), coords={'model': names})

print(da)

产量:

<xarray.DataArray 'stack-ff07239b7ea24834ba59f2d05b7f41e2' (model: 10, 
sample: 10000)>
dask.array<shape=(10, 10000), dtype=float64, chunksize=(1, 1000)>
Coordinates:
* model (model) <U2 'V0' 'V1' 'V2' 'V3' 'V4' 'V5' 'V6' 'V7' 'V8' 'V9'
Dimensions without coordinates: sample

这不太可能有效,尤其是当迭代器的长度变大时(如您的示例)。在 dask github 问题页面上提出这样一个构造函数可能是值得的。

关于python - 从行向量的迭代器构建一个大的 dask-backed xarray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50344033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com