【问题标题】:genfromtxt dtype=None not getting a 2d-arraygenfromtxt dtype=None 没有得到二维数组
【发布时间】:2014-11-07 00:32:42
【问题描述】:

我正在使用这一行来读取文件

data_train = np.genfromtxt(filename, delimiter=' ', autostrip=True, dtype=float, missing_values="", filling_values='0')

由于列的值可能不共享相同的类型,我得到一个一维数组。如果我使用dtype=None,则相同。但是,这些值可以是整数、浮点数或缺失值。

我可以解决这个问题并获得一个二维数组吗?

例如:

1, 2, 3, 4, 3.3, , 2.2, 1  
1.1, 2.2, 4, , , , ,

【问题讨论】:

  • 请发布展示示例数据。
  • @Bob 有哪些不同的类型?如果它是 float 和 int,那么使用 float 并最终在需要时转换为 int 会更直接......
  • 我尝试使用 dtype=float,但它不起作用。它仍然会生成一维对象数组
  • 您的字段以逗号分隔。使用delimiter=','
  • 如果它给你一个一维数组,dtype 可能是复杂的,混合了整数、浮点数、字符串。如果它不能强制所有元素为同一类型,它会这样做。

标签: python numpy io genfromtxt


【解决方案1】:

你可以使用:

np.nan_to_num(np.genfromtxt('test.txt', delimiter=','))

其中np.nan_to_num() 转换nan 条目,这些条目将由0 在您缺少数据的地方创建,获取您的示例:

array([[ 1. ,  2. ,  3. ,  4. ,  3.3,  0. ,  2.2,  1. ],
       [ 1.1,  2.2,  4. ,  0. ,  0. ,  0. ,  0. ,  0. ]])

编辑: 正如@unutbu、@Warren Weckesser 和下面的讨论所阐明的那样,根据您的系统,您可以简单地执行(对我来说,在 Windows 7 64 位、Python 2.7.8 64 位和NumPy 1.9.0 downloaded here 上它不起作用):

np.genfromtxt('test.txt', filling_values=0, delimiter=',')

【讨论】:

  • @Bob 你是对的......我试图让它工作将missing_values 传递给np.genfromtxt() 以避免np.nan_to_num() 调用,但它没有工作......
  • 由于一个错误,我使用了filling_values='0'。但它不适用于我的(我使用的是 1.8.0)没有 nan_to_num
  • @Bob:你和delimiter=','一起试过了吗?这对我来说适用于 numpy 1.8.2。
  • 这可能是原因
  • @Bob 我想说如果你必须保持与 NumPy np.nan_to_num(np.genfromtxt(...)) 否则坚持通过 filling_values=0 的更简单的解决方案
猜你喜欢
  • 2011-11-29
  • 1970-01-01
  • 2019-08-17
  • 2014-02-26
  • 1970-01-01
  • 2018-06-06
  • 2021-03-01
  • 2019-10-07
  • 1970-01-01
相关资源
最近更新 更多