Python 3D数据的最佳数据结构?

Python 3D数据的最佳数据结构?,python,data-structures,numpy,Python,Data Structures,Numpy,我有一些数据,是两个变量的函数,比如a和b f(a,b) 在数学术语中,我们可以将f视为三维视图中的曲面。问题是,存储这些数据的好数据结构是什么?我需要画出f作为a的函数表示常数b,f作为b的函数表示常数a。目前我使用的是数组的dict,类似这样: f['a1'] = [b1,b2,b3] 但是如果我现在想把f画成a和b常数的函数,我必须手工重新制作另一个dict: f['b1'] = [a1,a2,a3] 这被证明是非常麻烦的,使我的代码无法阅读。有没有一种很好的方法可以将这样的

我有一些数据,是两个变量的函数,比如a和b

f(a,b)
在数学术语中,我们可以将f视为三维视图中的曲面。问题是,存储这些数据的好数据结构是什么?我需要画出f作为a的函数表示常数b,f作为b的函数表示常数a。目前我使用的是数组的dict,类似这样:

  f['a1'] = [b1,b2,b3]
但是如果我现在想把f画成a和b常数的函数,我必须手工重新制作另一个dict:

  f['b1'] = [a1,a2,a3]

这被证明是非常麻烦的,使我的代码无法阅读。有没有一种很好的方法可以将这样的3D数据存储在numpy数据结构中,或者使用内置的python数据结构?

ndarray似乎很适合。参见

f['a1']=[b1、b2、b3]
我看不出这与你最初的描述有什么关系。你说f是两个变量的函数。。。我猜你是误导性地给这些贴上了“b”的标签

使用常规Python列表的示例 可以轻松地将二维数组存储为列表列表(请参见)。这将为您提供以下信息:

\u f\u值=[
[1, 4, 3],
[2, 8, 6],
[0, 7, 5],
]
def f(a,b):
返回值[a][b]
使用numpy的ndarray numpy具有多维同构数组的专用类型:。这肯定会更快。您可以使用

\u f\u array=numpy.array([
[1, 4, 3],
[2, 8, 6],
[0, 7, 5],
])
def f(a,b):
返回数组[a,b]
def f_行(a):
返回_f_数组[a,:]
def f_col(b):
返回_f_数组[:,b]

如果数据实际上是三维空间中的一个曲面,自然的存储方式是使用两个独立变量的唯一值的两个向量,
a
b
,以及一个二维数组,其中的值用于调用两个向量的笛卡尔积。例如:

def f(a, b) :
    return a + b

a = np.array([1, 3, 9, 15])
b = np.array([6, 18, 32])

# if your function f is vectorized
f_ab = f(a[:, np.newaxis], b)
# if it is not
f_ab = np.empty((len(a), len(b)), dtype=np.array(f(a[0], b[0])).dtype)
for i, a_ in enumerate(a):
    for j, b_ in enumerate(b):
        f_ab[i, j] = f(a_, b_)
现在,您可以获得与特定值
a
或特定值
b
对应的数据切片,如下所示:

>>> f_ab[a == 9, :]
array([[15, 27, 41]])

>>> f_ab[:, b==32]
array([[33],
       [35],
       [41],
       [47]])