【问题标题】:Wiriting a multidimensional numpy array into a CSV file将多维 numpy 数组写入 CSV 文件
【发布时间】:2016-09-27 22:32:21
【问题描述】:

我有一个想要写入 csv 文件的二维数组。我正在使用以下代码来做到这一点。我的数组已经是一个 float32 dtype 数组。然后我使用.asarray() 函数将数组转换为numpy。现在我想将其写入 csv 文件并使用以下代码:

activaiton_array = np.asarray(activation_list)
np.savetxt("/home/workstation/activation_data_file_1.csv", activaiton_array,fmt='%f', delimiter=",",)

但我收到以下错误:

np.savetxt("/home/workstation/activation_data_file_1.csv", activaiton_array,fmt='%f', delimiter=",",)

File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 1073, in savetxt
fh.write(asbytes(format % tuple(row) + newline))

TypeError: float argument required, not numpy.ndarray

【问题讨论】:

  • 我猜它不适用于 3+D 数组,并且它没有“解包”足够的层来到达浮点数,所以它留下了一个数组并被卡住了.你有几个维度?
  • 请举例说明您要写入 csv 的特定数组
  • 对不起,我没有指定它实际上是一个二维数组。我将编辑帖子。
  • 您的代码可以很好地处理这样的二维数组:x=np.asarray([[1, 2, 3], [4, 5, 6]], dtype=float); np.savetxt('test.csv', x, fmt='%f', delimiter=',')。你能举一个给你一个错误的数组的例子吗?
  • 阵列([[-47.44044876,53.48169327,-75.20567322,-251.82580566,-16.14718628,14.18919754,-7.94054556,61.17417145,90.40328217,-39.49287796,-169.89468384,180.6479187,14.25799465,-40.71538162,129.78521729, 78.43473053,-20.75302696,-51.29152679,-2.59940243,27.26807022,-115.14477539,66.79769135,14.48125744,-170.70048523,68.43611145,-90.43571472,-190.86634827,17.81785965,-56.12176514,7.12983942]],D型细胞= FLOAT32)] 跨度>

标签: python arrays csv numpy


【解决方案1】:

如果activaiton_array 是一个二维浮点数组,则savetxt 遍历行(第一维)并执行

fh.write(asbytes(format % tuple(row) + newline))

这期望row 是一维浮点数组; format 派生自您的 fmt 规范。实际上它正在做

'%f, %f, %f'%(1.23, 23.23, 1.0)

该错误表示row 不是一维或其元素不是数字。

我必须运行一些测试来查看 TypeError: float argument required, not numpy.ndarray 是由 row 是 2d(即您的数组实际上是 3d)还是由 row 是包含数组的 dtype 数组生成的。

您需要向我们展示activaiton_array.dtypeactivaiton_array.shape

【讨论】:

  • 感谢您的方法,我已经解决了问题,现在我可以将其写入 Excel 文件。我只需要在将 numpy 数组转换为 numpy 数组后对其进行整形。顺便说一句,数组 dtype 是 float32,形状是 (num_of_iteration x 1x150)。
  • 中间的1 维度会在不明显的情况下产生问题。
【解决方案2】:

试试:

np.savetxt("/home/workstation/activation_data_file_1.csv",activaiton_array.flatten())

【讨论】:

  • 这似乎工作,我可以写而不会收到错误。但是所有数据都写在一个列中。但我想要一个特定的数字,让我们在一行中说 150 个,在下一行中说下一个 150 个。实际上我想说的是我想将二维数组写为 CSV 文件中的二维数组,这不是我得到的。
  • 好的,我明白了。也许你可以使用np.array2string(activaiton_array, separator=', ') -> [[1,2,3,...],[1,2,3,...]] ?
猜你喜欢
  • 2015-08-07
  • 2022-11-17
  • 2018-07-09
  • 2019-01-29
  • 2023-03-31
  • 2014-08-20
  • 1970-01-01
  • 2018-03-08
  • 2014-08-30
相关资源
最近更新 更多