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

时间:2015-12-24 17:58:38

标签: python arrays numpy dask

将一片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中,是否与缓存或块大小有关?

2 个答案:

答案 0 :(得分:3)

转换为numpy数组的典型方法

您可以通过调用a = numpy.array([[1,2,3,4,5],[1,2,3,4,5]]) slice2 = a[[True,True],:3] slice2[0,0] = 100 print(a) -- gives us 1 2 3 4 5 1 2 3 4 5 方法将dask.array转换为numpy数组

.compute

或致电np_test_set = test_set.compute()

np.asarray

Fortran订购

原则上你现在正在做的事情应该也可以正常工作,所以这可能是一个错误。这似乎不典型的唯一部分是提前指定Fortran命令。看看改变这会影响结果会很有趣。

其他信息

如果这是一个真正的错误(看起来可能是这样),那么raise an issue会很好。看到dask.array的np_test_set = np.asarray(test_set) 会很有用。

答案 1 :(得分:0)

我将块改为(10,500),现在似乎有效:

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