Python:为什么将 Dask 切片复制到 Numpy 数组会导致行数不匹配

Python: Why copying a Dask slice to Numpy array result in row count mismatch

我在将 dask 数组的一部分复制到 nparray 时出错,行数不匹配

store = h5py.File(s_file_path + '.hdf5', 'r')
dset = store['data_matrix']
data_matrix = da.from_array(dset, chunks=dset.chunks)
test_set = data_matrix[482:, :]
np_test_set = np.array(test_set, order='FORTRAN')

print "source_set shape: ", data_matrix.shape
print "test_set shape: ", test_set.shape
print "np_test_set shape: ", np_test_set.shape

结果:

source_set shape:  (656, 473034)
test set shape:  (174, 473034)
np_test_set shape:  (195, 473034)

我对 dask 不是很熟悉,我使用它是因为我的数据不保存在 RAM 中,行差异与缓存或块大小有关吗?

转换为 numpy 数组的典型方法

您可以通过调用 .compute 方法将 dask.array 转换为 numpy 数组

np_test_set = test_set.compute()

或通过调用 np.asarray

np_test_set = np.asarray(test_set)

Fortran 排序

原则上,您现在所做的应该也能正常工作,所以这可能是一个错误。其中唯一看起来不典型的部分是提前指定 Fortran 顺序。看看改变这个是否会影响结果会很有趣。

附加信息

如果这是一个真正的错误(看起来可能是这样),那么 raise an issue 会很好。还可以查看 dask.array 的 chunks

我将块更改为 (10, 500),现在它似乎可以工作了:

data_matrix = da.from_array(dset, chunks=(10,500))