将一片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中,是否与缓存或块大小有关?
答案 0 :(得分:3)
您可以通过调用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命令。看看改变这会影响结果会很有趣。
如果这是一个真正的错误(看起来可能是这样),那么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))