【问题标题】:In Python: how to write a sparse matrix to a csv file?在 Python 中:如何将稀疏矩阵写入 csv 文件?
【发布时间】:2023-03-17 00:12:01
【问题描述】:

我是 Python 的新手。我得到了一个脚本,它生成随机数并将它们放入一个 126x81 的稀疏矩阵中。我想生成一个 csv 文件:Cell_ID; Cell_XCell_Y。单元格 X 和 Y 当然是每个单元格的坐标。我的脚本有一个循环,它生成一个“outputs.csv”文件,但其中的数据没有按照我想要的方式显示(每行的开头/结尾都有方括号,省略号 [... ] 代替某些值)。总而言之,我无法阅读矩阵的全部内容。

如果可以,我会上传一张图片,向您展示我希望这些数据在记事本或 Excel 中读取时的样子,但我不允许这样做。但是,这些数据应该看起来像一个典型的 csv 文件,每个值在其列下对齐。 谢谢你们的帮助! :)

【问题讨论】:

  • 您应该包含更多代码。例如,g 是什么?此外,当您写入文件时,您的变量 mn 似乎超出了范围。
  • g 是我的矩阵。 mn 值与您在第一行中看到的 140100 不对应 - 我被告知此脚本使用缩小的窗口来分配和绘制值。
  • 请定义g。至少告诉我们它有什么类型。也许你的问题可以通过修复这条线来解决:val = g[m:n]val = g[m, n](但这是一个疯狂的猜测)。而下面的outputFile.write(... 显然有错误的缩进。
  • g = gauss_kern(n, sizey=ny)。这是你想知道的吗?
  • 不,因为我不知道gauss_kern 是什么,这根本没有帮助。我猜gnumpy.ndarray。如果是这样,我上面的建议应该可以解决问题。

标签: python excel csv matrix matplotlib


【解决方案1】:

既然标准库支持csv,那就用吧:

import numpy
import csv

N = 126
M = 81

g = numpy.random.rand(N, M)

with open('test.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerow(['x', 'y', 'value'])
    for (n, m), val in numpy.ndenumerate(g):
        writer.writerow([n, m, val])

【讨论】:

  • 谢谢,虽然添加这些行会生成一个 csv 文件,当用记事本打开时,显示已停止在 N=139。我怎样才能让它停在 N=125? (如果 N 从 0 开始,那当然是 126 列)。
  • 您的意思是在您的代码中还是在我的代码中?我建议在写作之前检查 g 的形状。我们的枚举不太可能是错误的。
猜你喜欢
  • 2011-06-01
  • 2013-07-08
  • 1970-01-01
  • 2014-08-17
  • 2014-09-27
  • 2010-12-28
  • 1970-01-01
  • 2016-01-24
  • 2014-11-01
相关资源
最近更新 更多