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))
我在将 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))