有关输出数组的更多信息,并指示



我具有一个数学函数,其输出由两个变量xy

该功能是e^(x^3 + y^2)

我想计算xy的1和某些定义整数之间的所有可能整数组合,然后将它们放在数组中,以使每个输出都与对应的x值和y值索引对齐。所以类似:

给定:

x = 3
y = 5

输出将是这样的数组:

f(1,1) f(1,2) f(1,3)
f(2,1) f(2,2) f(2,3)
f(3,1) f(3,2) f(3,3)
f(4,1) f(4,2) f(4,3)
f(5,1) f(5,2) f(5,3)

我觉得这是一个容易解决的问题,但我的知识有限。以下代码是最佳描述。

import math 
import numpy as np
equation = math.exp(x**3 + y**2)
#start at 1, not zero
i = 1
j = 1
#i want an array output
output = []
#function
def shape_f (i,j):
    shape = []
    output.append(shape)
    while i < x + 1:
        while j < y +1: 
            return math.exp(i**3 + j**2)
#increase counter
i = i +1
j = j +1
print output

我最近有一个空白的数组

我不确定您是否有凹痕错误,但是看起来您从来没有对函数shape_f的输出做任何事情。您应该将方程定义为函数,而不是表达分配。然后,您可以制作一个函数,以填充您所描述的列表。

import math
def equation(x, y):
    return math.exp(x**3 + y**2)
def make_matrix(x_max, y_max, x_min=1, y_min=1):
    out = []
    for i in range(x_min, x_max+1):
        row = []
        for j in range(y_min, y_max+1):
            row.append(equation(i, j))
        out.append(row)
    return out
matrix = make_matrix(3, 3)
matrix
# returns:
[[7.38905609893065, 148.4131591025766, 22026.465794806718],
 [8103.083927575384, 162754.79141900392, 24154952.7535753],
 [1446257064291.475, 29048849665247.426, 4311231547115195.0]]

我们可以很简单地使用numpy

首先,我们使用np.arange生成一个值范围的值,从0(简化索引(到xy的最大值。我们可以以矢量化的方式执行指示,以获取x^3y^2的值。

接下来,我们可以在x^3y^3的外部产品上应用np.add,以获取其所有可能的组合。最后一步是对结果的自然指数呈:

x_max = 3
y_max = 5
x = np.arange(x_max + 1) ** 3
y = np.arange(y_max + 1) ** 2
result = np.e ** np.add.outer(x, y)
print(result[2, 3]) # e^(2 ** 3 + 3 ** 2)

输出:

24154952.753575277

一个微不足道的解决方案是将numpy的广播功能与 exp函数:

使用:
x = 3
y = 5
i = np.arange(y).reshape(-1, 1) + 1
j = np.arange(x).reshape(1, -1) + 1
result = np.exp(j**3 + y**2)

reshape操作将i制成带有y元素的列,然后用x元素将j分为一行。启动不会改变这些形状。当您将两个阵列添加在一起时,会发生广播。一个数组中的单元尺寸将扩展到另一个数组的相应维度。结果是 y -by- x矩阵。

最新更新