【问题标题】:How to write a dictionary with numpy array in a file如何在文件中使用 numpy 数组编写字典
【发布时间】:2016-03-15 23:11:45
【问题描述】:

我有一本这样的字典:`

d = {1: array([ 1.,  1., 0., 1.]),2: array([ 0.,  1., 0., 1.]), 3:
        array([ 1.,  0., 0., 1.]), 4: array([ 1.,  0., 1., 1.])}`

我想写下所有的值:

 ([ 1.,  1., 0., 1.], [ 0.,  1., 0., 1.], 
  [ 1.,  0., 0., 1.], [ 1.,  0., 1., 1.]) 

在 .tsv 文件中。列中的每个值,在此示例中,我将有 4 列 4 行。

这是我想要的文件:

1 0 1 1

1 1 0 0

0 0 0 1

1 1 1 1

每个 numpy 数组都打印在不同的列中。

我的代码给了我同一列中的所有值:

f = open("Result.tsv", "wb")
for key, value in d.items():
    np.savetxt(f, value, delimiter=',')
f.close()

【问题讨论】:

  • 请不要用你自己的来掩盖内置的dict。我把变量名改成了d
  • 谢谢!我是新手。

标签: python arrays python-3.x numpy dictionary


【解决方案1】:

最简单的方法可能是将数组格式化为 2d 而不是 1d 列的 dict:

out = np.empty((4, 4))
for colnb, col in d.items():
    out[:, colnb-1] = col
with open("Result.tsv", 'wb') as f:
    np.savetxt(f, out, delimiter=',')

这样,你让 numpy savetxt 函数处理所有工作

【讨论】:

  • 这段代码抛出异常IndexError: index 4 is out of bounds for axis 1 with size 4
  • @Oz123:你说得对:我忘记了 0 索引。现在更正它(尽管这更像是给出一个想法而不是任何类似于健壮实现的东西)。谢谢!
【解决方案2】:

这几乎可以满足您的需求:

with open('Result.csv', 'w') as f:
    for k, v in d.items():
        f.write(str(v)[1:-1]+'\n')



$ cat Result.csv
 1.  1.  0.  1.
 0.  1.  0.  1.
 1.  0.  0.  1.
 1.  0.  1.  1.

这是额外的步骤并删除了小数点:

with open('Result.csv', 'w') as f:
    for k, v in d.items():
        f.write(str(map(int, v))[1:-1]+'\n')

还请注意,如果您已经将其编写为二进制文件,该文件是另一个程序的输入,您可以执行以下操作(但这不会给您显示的文本格式)。最后你这样做:

with open('Result.csv', 'w') as f:
    for k, v in d.items():
        v.tofile(f, sep=',', format='%d')
        f.write('\n')       

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 2016-10-23
    • 1970-01-01
    • 2019-07-14
    • 2012-06-06
    • 2018-07-17
    • 2016-12-19
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多