我有一个关于numpy内存错误问题的大量数据, 我尝试使用切片来处理它,如下所示 How to merge two large numpy arrays if slicing doesn't resolve memory error?
切片适用于numpy.multiply,但似乎无法通过切片将numpy int转换为float。 以下是样本:
images = numpy.array([1,2,3,4,5,6,7,8,9,10])
images[0:5] = images[0:5].astype(numpy.float32)
print type(images[0])
images = images.astype(numpy.float32)
print type(images[0])
<type 'numpy.int32'>
<type 'numpy.float32'>
一旦我使用images.astype(numpy.float32),我就会出现内存错误(dtype相同)。 目标内存太小,我可能很难使用稀疏矩阵。
感谢任何建议......!
答案 0 :(得分:1)
您无法仅修改切片的dtype
。当你这样做
images[0:5] = images[0:5].astype(numpy.float32)
images[0:5].astype(numpy.float32)
会创建切片的float
副本,但在将int
切换回images
后,结果会转换回images
dtype
int
。
您可以做的是创建切片的临时副本并将其转换为float:
copied_slice = images[0:5].astype(numpy.float32)
在数据的这个较小部分上进行所需的所有计算,保存所需的结果,然后转到下一个(复制和转换的)切片。