Python - 找到两个数组之间所有可能的组合

Python - Find all possible combination between two arrays

我已经为我的长代码创建了一个小模型。 现在,让我们考虑以下示例,其中:

在下面的代码中,我能够生成此函数的绘图,关于 X 和 Y 的每个元素,即关于 X 的第一个元素和第一个元素Y 列表,之后是相对于两个列表的第二个元素,直到两个列表的最后一个元素,如下图所示:

如何在这两个列表之间获取所有可能的组合?是否可以用 3 维图表示所有可能的组合?

这是我的代码的“模型”:

import numpy as np
from scipy.interpolate import barycentric_interpolate
import matplotlib.pyplot as plt
def func(x,y):
    return 2*np.array(x) - np.array(y)**2

lower_x, upper_x = 100,150
lower_y, upper_y = 0.5,1.
x_interval = np.arange(lower_x, upper_x,1)    #X
y_interval = np.arange(lower_y, upper_y,0.01) #Y

x1 = np.linspace(lower_x, upper_x,7)
x2 = np.linspace(lower_y, upper_y,7)


def function(x1,x2,x_interval,y_interval):
    res_tot = []
    res_1 = []

    index = 0
    for xi in x_interval:
        result = func(xi,x2)
        interpolation = barycentric_interpolate(x2,result,y_interval)
        res_1.append(interpolation[index])
        index += 1
    
    index = 0
    for xi in x1:
        result = func(xi,x2)
        res_tot.append(result[index])
        index += 1

    output = barycentric_interpolate(x1, res_tot, x_interval)
    return np.array(res_1) - np.array(output)*x_interval
print(function(x1,x2,x_interval,y_interval))

plt.plot(function(x1,x2,x_interval,y_interval))

提前致谢!!

如果您的目的是获得用于 3D 绘图的 x/y 组合,那么您正在寻找的是 numpy.meshgrid

# input arrays
x = np.arange(1, 10)
y = np.arange(10, 100, 20)

# x = array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# y = array([10, 30, 50, 70, 90])

# computing the meshgrid
X, Y = np.meshgrid(x,y)

输出:

# X
array([[1, 2, 3, 4, 5, 6, 7, 8, 9],
       [1, 2, 3, 4, 5, 6, 7, 8, 9],
       [1, 2, 3, 4, 5, 6, 7, 8, 9],
       [1, 2, 3, 4, 5, 6, 7, 8, 9],
       [1, 2, 3, 4, 5, 6, 7, 8, 9]])

# Y
array([[10, 10, 10, 10, 10, 10, 10, 10, 10],
       [30, 30, 30, 30, 30, 30, 30, 30, 30],
       [50, 50, 50, 50, 50, 50, 50, 50, 50],
       [70, 70, 70, 70, 70, 70, 70, 70, 70],
       [90, 90, 90, 90, 90, 90, 90, 90, 90]])

对于三维图,您将需要带有 z_interval 的第三个列表。

import matplotlib.pyplot as plt

x_interval = [1,2,3,4,5]
y_interval = [6,7,8,9,10]
z_interval = [0,3,9,5,11]

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot3D(x_interval, y_interval, z_interval, 'gray')

要交互所有 X 和 Y,您只需在 for 中使用 for:

for x in x_interval:
    for y in y_interval:
        do_something(x,y)

创建所有可能组合的一种简单方法是使用 Pandas。

import pandas as pd

x_interval = [1,2,3,4,5]
y_interval = [6,7,8,9,10]

x_interval_df = pd.DataFrame (x_interval, columns = ['column_x'])
y_interval_df = pd.DataFrame (y_interval, columns = ['column_y'])

x_interval_df['key'] = 1
y_interval_df['key'] = 1

possible_combinations = pd.merge(x_interval_df, y_interval_df, on ='key').drop(columns=['key'])

然后您可以将数据框与所有可能的组合进行交互。