有关带方程和索引的输出数组的更多信息
More information on output array with equation and indicies
我有一个数学函数,其输出由两个变量定义,x
和 y
。
函数为e^(x^3 + y^2)
。
我想为 x
和 y
计算 1 和某个定义的整数之间的每个可能的整数组合,并将它们放在一个数组中,以便每个输出与相应的 [=13] 对齐=] 值和 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
我最近得到了一个空白数组,但我也得到了一个值(int 而不是数组)
我不确定你是否有缩进错误,但看起来你从未对函数 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
为 x
和 y
生成从 0(以简化索引)到最大值的值范围。我们可以以向量化的方式执行求幂运算,以获得 x^3
和 y^2
的值。
接下来,我们可以对 x^3
和 y^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
一个简单的解决方案是使用 broadcasting feature of numpy with the 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
个元素的列,使 j
成为具有 x
个元素的行。取幂不会改变这些形状。当您将两个数组加在一起时,就会发生广播。一个数组中的单位维度扩展到另一个数组中的相应维度。结果是 y
×x
矩阵。
我有一个数学函数,其输出由两个变量定义,x
和 y
。
函数为e^(x^3 + y^2)
。
我想为 x
和 y
计算 1 和某个定义的整数之间的每个可能的整数组合,并将它们放在一个数组中,以便每个输出与相应的 [=13] 对齐=] 值和 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
我最近得到了一个空白数组,但我也得到了一个值(int 而不是数组)
我不确定你是否有缩进错误,但看起来你从未对函数 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
为 x
和 y
生成从 0(以简化索引)到最大值的值范围。我们可以以向量化的方式执行求幂运算,以获得 x^3
和 y^2
的值。
接下来,我们可以对 x^3
和 y^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
一个简单的解决方案是使用 broadcasting feature of numpy with the 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
个元素的列,使 j
成为具有 x
个元素的行。取幂不会改变这些形状。当您将两个数组加在一起时,就会发生广播。一个数组中的单位维度扩展到另一个数组中的相应维度。结果是 y
×x
矩阵。