通过 Python 中的 OpenTURNS 将一维数组转换为样本
Posted
技术标签:
【中文标题】通过 Python 中的 OpenTURNS 将一维数组转换为样本【英文标题】:Turn a 1D array into a sample by OpenTURNS in Python 【发布时间】:2021-07-13 15:17:35 【问题描述】:我正在尝试按照此示例通过克里金法在 2D 网格上插入响应: How to interpolate 2D spatial data with kriging in Python?
但是,当我尝试在 OpenTURNS 中从一维数组创建样本时,
import numpy as np
import openturns as ot
observations = ot.Sample(np.array([1,2,3]))
我不断收到此错误
TypeError: Wrong number or type of arguments for overloaded function 'new_Sample'.
Possible C/C++ prototypes are:
OT::Sample::Sample()
OT::Sample::Sample(OT::UnsignedInteger const,OT::UnsignedInteger const)
OT::Sample::Sample(OT::UnsignedInteger const,OT::Point const &)
OT::Sample::Sample(OT::Sample const &,OT::UnsignedInteger const,OT::UnsignedInteger const)
OT::Sample::Sample(OT::SampleImplementation const &)
OT::Sample::Sample(OT::Sample const &)
OT::Sample::Sample(PyObject *)
这也不起作用:
observations = ot.Sample(np.array([[1],[2],[3]]))
【问题讨论】:
【参考方案1】:例外是因为这是一个模棱两可的情况。 array
包含 3 个值:Sample
类不知道该数据是对应于由维度 1 中的 3 个点组成的样本,还是对应于维度 3 中的一个点的样本。
阐明这一点的类是:
ot.Point()
类管理一个多维实向量 - 它有一个维度(分量的数量),
ot.Sample()
管理点的集合 - 它具有大小(样本中的点数)和维度(样本中每个点的维度)。
Python 数据类型和 OpenTURNS 数据类型之间存在自动转换:
Pythonlist
或 tuple
或一维 numpy array
会自动转换为 ot.Point()
列表的 Python list
或 2D numpy array
会自动转换为 ot.Sample()
创建一维Sample
的常用方法是使用浮点数列表。
请让我来说明这三个结构。
(案例 1)要从一维数组创建点,我们只需将其传递给 Point
类:
import numpy as np
import openturns as ot
array_1D = np.array([1.0, 2.0, 3.0])
point = ot.Point(array_1D)
print(point)
这将打印[1,2,3]
,即维度 3 中的一个点。
(案例 2)要从二维数组创建 Sample
,我们添加所需的方括号。
array_2D = np.array([[1.0], [2.0], [3.0]])
sample = ot.Sample(array_2D)
print(sample)
打印出来:
0 : [ 1 ]
1 : [ 2 ]
2 : [ 3 ]
这是一个由 3 个点组成的样本;每个点都有一个维度。
(案例 3)我们经常需要从浮点数列表中创建一个Sample
。这可以通过列表推导更轻松地完成。
list_of_floats = [1.0, 2.0, 3.0]
sample = ot.Sample([[v] for v in list_of_floats])
print(sample)
这将打印与上一个示例相同的样本。 最后一个脚本:
observations = ot.Sample(np.array([[1],[2],[3]]))
# Oups: should use 1.0 instead of 1
在我的机器上运行良好。请注意,OpenTURNS 只管理浮点值的点,而不是 int
类型的点。这就是我写作的原因:
observations = ot.Sample(np.array([[1.0], [2.0], [3.0]]))
为了说明这一点。
然而,对array
函数的调用是不必要的。使用起来更简单:
observations = ot.Sample([[1.0], [2.0], [3.0]])
【讨论】:
以上是关于通过 Python 中的 OpenTURNS 将一维数组转换为样本的主要内容,如果未能解决你的问题,请参考以下文章
Pandas: 如何将一列中的文本拆分为多行? | Python
Python Pandas 将一列中的 NaN 替换为第二列对应行的值