【问题标题】:Convert 2-d array of strings to float in python_removing scientific notation将二维字符串数组转换为 python_removing 科学记数法中的浮点数
【发布时间】:2013-11-29 05:33:56
【问题描述】:

当我在 x 数组中使用 numpy.astype 时,如何将科学记数法转换为原始格式?这是我的代码:

with open ('outfile.csv', 'r') as infile:
    reader = csv.reader(infile)
    reader_list = list(reader)
    reader_array = array(reader_list)
    x = reader_array[:,5].astype(np.float)

    #original array:
    print reader_array[:,5]

    #converted to float
    print x

#original array:
['-0.00041955436132607246' '-0.00036612800229292086'  '0.00022313364860991641' ..., '73.418371245304215' '73.417384428365267'  '73.416718169781149'] 

#converted to float
[ -4.19554361e-04  -3.66128002e-04   2.23133649e-04 ...,   7.34183712e+01    7.34173844e+01   7.34167182e+01]

更具体地说,我想将字符串数组转换为浮点数,但保持与原始数组相同的格式,并对其进行一些分析:

#find row number of max value in column 1: (This piece works fine)
max_index = where(reader_array[:,1] == max(reader_array[:,1]))

#take last element in column 5: (This one is also fine)
total_ = (reader_array[(len(reader_array[:,5])-1),5])

#find row number where element in column 5 is equal to 0.1*total_: (here's the problem!)
0.1_index = where((reader_array[:,5]) == (total_)*0.1)

所以我认为将字符串更改为浮点数但格式与原始数组相同允许将数组成员乘以另一个浮点数(此处为 0.1)。

请注意,值 (0.1*total_) 可能与第 5 列中的任何行值都不匹配,我必须考虑如何解决。但是如果不能将行与 (0.1*total_) 进行比较,我就无法进步。

如果有人可以提示如何接近,我将不胜感激。

【问题讨论】:

  • 这更多是打印问题,您的问题可能在这里得到解答:How to force a ndarray show in normal way instead of scientific notation?
  • Numpy 是不够的,因为 float64 只有约 15 个有效数字,而您的数字有 17 个有效数字。您可以使用Decimal,或SymPy
  • 这不是重复的,OP 存在类型差异等问题。这个问题与印刷本身无关(虽然它确实听起来像那样,但印刷问题只是一种误解的表现)。
  • @SaulloCastro,嗯,不是真的,我已经尝试过打印选项,但这不是我的问题。正如 Henry Gomersall 所指出的,我的问题在于类型。我可能需要为我以后的问题添加更多说明。谢谢。
  • @GustavBertram,感谢您指向 Decimal。

标签: python numpy multidimensional-array type-conversion scientific-notation


【解决方案1】:

您本质上受到浮点数使用IEEE 754 存储这一事实的限制。你不能有任意精度的浮点数,所以在你的情况下,你不能期望它们一定与字符串表示形式完全相同。

但是,就您而言,更紧迫的问题是将字符串与浮点数进行比较,因此它们当然会有所不同。 Python 是动态的,但strongly 是类型化的。

鉴于以上两点,您需要更好地定义您的问题。为什么需要与字符串数组进行比较? (这甚至意味着什么!?)

在整理好数据类型(例如使用numpy.close)后,您能否测试接近性而不是相等性?

【讨论】:

  • 非常感谢您的厘米。暗示“接近”让我想到了这一点,最后通过定义一个函数来找到最近的点找到了解决方案。
猜你喜欢
  • 2014-09-25
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
  • 2020-06-10
  • 2019-04-22
  • 1970-01-01
相关资源
最近更新 更多