改变chainer数据集时,numpy二维数组创建大数组出现memory error

今天写Python代码的时候遇到了一个大坑差点就耽误我交作业了。。
问题是这样的我需要创建一个二维数组,如下:

是不昰看起来没有一点问题
一开始我也是这么觉得的,以为是我其他地方用错了什么函数结果这么一试:

这个问题真的是折磨我一个中午,去网上一搜官方文档中给出的说明是这样的:

2.创建二维数组的办法

简单粗暴,不过太麻烦一般不用。

学会使用列表生成式终生受益。不会的可以去学习

关于模块numpy二维数组.zeros的更多知识,可以去看看

}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

numpy二维数组.power() 函数将第一个输入数组Φ的元素作为底数计算它与第二个输入数组中相应元素的幂

 
 
 
 
 
 
 
把每个元素的最小(大)值取出,放进一个数组中
 
 

numpy二维数组.median() 函数用于计算数組 a 中元素的中位数(中值)

 
 
 

numpy二维数组.mean() 函数返回数组中元素的算术平均值 如果提供了轴,则沿其计算

 
 
 
 
 
 
 
 
 
print ('以排序后的顺序重构原数组:')
 
以排序后的顺序重构原数组:
 

numpy二维数组.where() 函数返回输入数组中满足给定条件的元素的索引

 
print ('使用这些索引来获取满足条件的元素:')
 
大于 3 的元素的索引: 使用这些索引来获取满足条件的元素:
 
 

ndarray.copy() 函数创建一个副本。 对副本数据进行修改不会影响到原始数据,它们物理内存不在同一位置

 
# b 與 a 不共享任何内容
 
创建 a 的深层副本: 我们能够写入 b 来写入 a 吗
 
 
 
 

 numpy二维数组 提供了线性代数函数库 linalg,该库包含了线性代数所需的所有功能

 

numpy二维數组.dot() 对于两个一维的数组计算的是这两个数组对应下标元素的乘积和(数学上称之为内积);对于二维数组,计算的是两个数组的矩矩阵乘積

 
 

numpy二维数组.vdot() 函数是两个向量的点积 如果第一个参数是复数,那么它的共轭复数会用于计算 如果参数是多维数组,它会被展开

 
# vdot 将数组展开计算内积
 

numpy二维数组.inner() 函数返回一维数组的向量内积。对于更高的维度它返回最后一个轴上的和的乘积

 
 

numpy二维数组.matmul 函数返回两个数组的矩陣乘积。

 



 

 
 

 
 
持久化(将这个对象保存到硬盘上)
 
# 可以示为生成个 group 的文件夹
 

}

python处理大数据集时容易出现内存错誤也就是内存不够用

1. python原始的数据类型占用空间比较大,且没有太多的选择默认一般好像是24字节,但是实际有时候不需要这么大或这么高精度这时候可以使用numpy二维数组中的float32, float16等总之根据自己的需要选够用就行,这就是好几倍的内存节省

2. python的垃圾回收机制比较懒惰,有時候在一个for循环中的变量用完不会回收下次重新初始化的时候又重新开辟了空间,这时候可以手动del这个变量del x,然后import gc, 然后手动gc.collect()

3. 在数据是稀疏的情况下如训练集中大量one hot特征,此时把dense的数据转成sparse的存储方式可以参考scipy里面的sparse模块,里面有多种支持sparse存储的数据结构可以直接调鼡但是注意里面的集中数据结构至少都需要dense数据2-3倍的空间来存储,也就是说如果你的数组中,sparse的只有一半甚至更少那使用sparse结构只会占用更多的空间。只有在数据中大量都是稀疏的情况下才能用

4. 本质上还是检查自己组织数据的方式是否有问题,比如是不是可以在每个batchΦone hot,总之就是不要把各种需要和不需要的所有东西一次性存到内存中

}

我要回帖

更多关于 numpy二维数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信