我正在将numpy
稀疏数组(压缩)保存到csv中。结果是我有一个3GB的CSV。问题是95%的单元格为0.0000。我用过fmt='%5.4f'
。如何格式化和保存,使零仅保存为0,非零浮点数与'%5.4f'
格式一起保存?如果可以的话,我敢肯定我可以将3GB降低到300MB。
我在用
np.savetxt('foo.csv', arrayDense, fmt='%5.4f', delimiter = ',')
感谢和问候
如果看一下的源代码np.savetxt
,您会看到,虽然有很多代码可以处理参数以及Python 2和Python
3之间的差异,但最终它还是一个简单的遍历行的python循环,其中每行被格式化并写入文件。因此,如果您自己编写,就不会失去任何性能。例如,这是一个精简的函数,它写入紧凑的零:
def savetxt_compact(fname, x, fmt="%.6g", delimiter=','):
with open(fname, 'w') as fh:
for row in x:
line = delimiter.join("0" if value == 0 else fmt % value for value in row)
fh.write(line + '\n')
例如:
In [70]: x
Out[70]:
array([[ 0. , 0. , 0. , 0. , 1.2345 ],
[ 0. , 9.87654321, 0. , 0. , 0. ],
[ 0. , 3.14159265, 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ]])
In [71]: savetxt_compact('foo.csv', x, fmt='%.4f')
In [72]: !cat foo.csv
0,0,0,0,1.2345
0,9.8765,0,0,0
0,3.1416,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
然后,只要编写自己的savetxt
函数,就可以使其处理稀疏矩阵,因此不必在保存之前将其转换为(密集)numpy数组。(我假设稀疏数组是使用from中的稀疏表示形式实现的scipy.sparse
。)在以下函数中,唯一的变化是from... for value in row
到... for value in row.A[0]
。
def savetxt_sparse_compact(fname, x, fmt="%.6g", delimiter=','):
with open(fname, 'w') as fh:
for row in x:
line = delimiter.join("0" if value == 0 else fmt % value for value in row.A[0])
fh.write(line + '\n')
例:
In [112]: a
Out[112]:
<6x5 sparse matrix of type '<type 'numpy.float64'>'
with 3 stored elements in Compressed Sparse Row format>
In [113]: a.A
Out[113]:
array([[ 0. , 0. , 0. , 0. , 1.2345 ],
[ 0. , 9.87654321, 0. , 0. , 0. ],
[ 0. , 3.14159265, 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ]])
In [114]: savetxt_sparse_compact('foo.csv', a, fmt='%.4f')
In [115]: !cat foo.csv
0,0,0,0,1.2345
0,9.8765,0,0,0
0,3.1416,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
问题内容: 我正在创建一个HTML表,将在Excel中作为电子表格打开。我可以使用哪种HTML标记或CSS样式“讲述” Excel以将单元格的内容显示为文本? 问题答案: 您可以将格式应用于数字,文本,日期等的单元格。 请参阅我以前关于此的答案:HTML toExcel:如何告诉Excel将列视为数字? (已调整的代码段) 如果将CSS类添加到页面: 并在您的TD上拍那些课,行得通吗?
问题内容: 我正在使用Plotly offline在python中生成图形。 根据以下文档, https://plot.ly/python/offline/ 这是我的代码,可以完美地生成C:/tmp/test_plot.html文件。 如何将此图另存为png而不是html? 问题答案: 方法具有和 属性,可将文件另存为。 在上或在线查看更多详细信息。 但是,有一点需要注意的是,由于输出图像是与HT
我有多个文本框,当用户在不同的文本框中键入时,我希望有一个存储所有格式化数据的数组。 格式化的数据以 m:ss 为单位(m - 分钟,s - 秒) 现在,所有不同的文本框都显示相同的值,因为只有一个this.formatTime. 我们如何改变这一点,以便v-model遍历数组,并将其添加到格式化值数组中? 文本框应显示格式化的值,并将其存储在所有格式值[]中。 我真的被困在这个,谢谢你的时间!
我正在本地机器中将spark数据集保存为拼花文件。我想知道是否有任何方法可以使用某种加密算法对数据进行加密。我用来将数据保存为拼花文件的代码如下所示。 <代码>数据集。写入()。模式(“覆盖”)。拼花地板 我看到了一个类似的问题,但我的查询不同,因为我正在写入本地磁盘。
问题内容: 我有以下格式化字符串的方法: 如果是负的零(,等)的输出将是。 如何使输出始终始终为负的零值和正的零值? (实现此目标相当简单,但我找不到所谓的简洁pythonic方式。理想情况下,有一个我不知道的字符串格式设置选项。) 问题答案: 加零: 您可以格式化:
问题内容: 我有一个字符串“ ”,我想将其格式化为“ ”,正确的模式是什么? 我已经尝试了很多,并用谷歌搜索,但仍然找不到正确的模式。 编辑:我正在寻找Joda-Time ,而不是Java的SimpleDateFormat。 问题答案: 请注意,在JAVA SE 8中引入了新的java.time(JSR-310)包。 这代替了Joda时间,建议Joda用户进行迁移。有关JAVA SE≥8格式化日期