用 `dask.array` 索引 `numpy.array`
Indexing a `numpy.array` with a `dask.array`
使用 dask.array
索引 numpy.array
时出现错误,我不确定这是功能还是错误。
In [1]: import numpy as np
In [2]: import dask.array as dka
In [3]: foo = np.arange(10)
In [4]: bar = np.arange(3)
In [5]: foo[bar]
Out[5]: array([0, 1, 2])
In [6]: foo[dka.from_array(bar)]
<ipython-input-16-9c4b06c0d0c4>:1: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
foo[dka.from_array(bar)]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-16-9c4b06c0d0c4> in <module>
----> 1 foo[dka.from_array(bar)]
IndexError: too many indices for array: array is 1-dimensional, but 3 were indexed
我正在使用版本 dask==2022.01.0
和 numpy==1.22.0
。
如错误所述(尽管以 not-so-clear 方式),问题是 numpy 不将 dask 数组识别为受支持的类型,但将它们识别为序列,解释也是如此您的索引操作是尝试进行多维索引。
如果您明确表示您正尝试在第一个维度中提供索引数组,那么它就可以正常工作:
In [5]: foo[dka.from_array(bar), ...]
Out[5]: array([0, 1, 2])
或等效地,您可以使用 np.take
或许多索引选项中的任何一个:
In [6]: np.take(foo, dka.from_array(bar), axis=0)
Out[6]: array([0, 1, 2])
使用 dask.array
索引 numpy.array
时出现错误,我不确定这是功能还是错误。
In [1]: import numpy as np
In [2]: import dask.array as dka
In [3]: foo = np.arange(10)
In [4]: bar = np.arange(3)
In [5]: foo[bar]
Out[5]: array([0, 1, 2])
In [6]: foo[dka.from_array(bar)]
<ipython-input-16-9c4b06c0d0c4>:1: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
foo[dka.from_array(bar)]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-16-9c4b06c0d0c4> in <module>
----> 1 foo[dka.from_array(bar)]
IndexError: too many indices for array: array is 1-dimensional, but 3 were indexed
我正在使用版本 dask==2022.01.0
和 numpy==1.22.0
。
如错误所述(尽管以 not-so-clear 方式),问题是 numpy 不将 dask 数组识别为受支持的类型,但将它们识别为序列,解释也是如此您的索引操作是尝试进行多维索引。
如果您明确表示您正尝试在第一个维度中提供索引数组,那么它就可以正常工作:
In [5]: foo[dka.from_array(bar), ...]
Out[5]: array([0, 1, 2])
或等效地,您可以使用 np.take
或许多索引选项中的任何一个:
In [6]: np.take(foo, dka.from_array(bar), axis=0)
Out[6]: array([0, 1, 2])