【问题标题】:Scipy: change dtype of interpolationScipy:更改插值的dtype
【发布时间】:2017-08-12 14:27:54
【问题描述】:

是否可以强制 scipy 的插值输出具有特定 numpy dtype 的数组?

例如,从 scipy.interpolate.Rbf() 输出一个 float32 数组?

【问题讨论】:

  • 你现在得到什么数据类型?它取决于输入的dtype吗?可能是 Python 代码调用编译例程的类型选项很少(例如 double)。回归后投射可能是最好的选择。

标签: python numpy scipy numpy-dtype


【解决方案1】:

不,你总是得到 float64 类型。对于其他任何事情,在收到后将输出转换为.astype(np.float32)等。

我以 Rbf 为例:它对输入数据所做的第一件事是将其转换为 np.float_,这是 float64 的别名。 As seen here:

self.xi = np.asarray([np.asarray(a, dtype=np.float_).flatten()
                           for a in args[:-1]])

插值的节点是从中计算出来的,所以它们也是float64。 Rbf 对象的调用方法不会强制转换输入数据,但是 NumPy 在np.dot 内无论如何都会这样做,因为self.nodes 的数据类型:

return np.dot(self._function(r), self.nodes).reshape(shp)

【讨论】:

  • 这是一种不幸的行为。如果尝试插入一个大栅格(从可能具有较少精度位数的测量数据),那么 64 位数据类型会导致内存限制提前数次达到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 2013-01-06
  • 2019-06-02
  • 2020-09-15
  • 1970-01-01
  • 2011-07-04
相关资源
最近更新 更多