我想做一个输出预定义大小数组的函数。该函数依赖于变量x
、y
、rx
、ry
和d
。变量x
和y
与笛卡尔数值直接相关。rx
和ry
是从函数生成的blobs的半径。
我已经将数组独立从传统的左上角的0, 0
转换到最中间的像素。这个数组在长度和宽度的herms中应该总是奇数。
下面的blob一次给我一个数组。我需要一堆可以相加的数组。当我更改x
和y
时,数组的大小也会改变,但我需要数组保持相同的大小或在边界上归零。
我有一些如下的代码:
def equation(x, y):
return 1 * np.exp(-(x**2 + y**2))
def make_matrix(xs, ys, x_min=nxs, y_min=nys): #makes cartesian values
out = [] #outputs array
for i in range(x_min, xs - center_x):
row = []
for j in range(y_min, ys - center_y):
row.append(equation(i, j))
out.append(row)
return out
blob = np.asarray(list(np.float_(make_matrix(x, y))))
发布于 2019-07-16 02:59:16
矢量化是你的朋友。当您的函数可以针对整个数组进行逐个元素计算时,不需要逐个元素地计算列表。
def make_matrix(xs, ys, x_min=nxs, y_min=nys):
x = np.arange(x_min, xs - center_x).reshape(1, -1)
y = np.arange(y_min, ys - center_y).reshape(-1, 1)
out = np.exp(-(x**2 + y**2))
return out
reshape
操作为x
创建了一个1xN行向量,为y
创建了一个Nx1列向量。这些形状确保add
(+
)操作中的broadcasting将x**2 + y**2
扩展为所需的最终大小的数组。
https://stackoverflow.com/questions/57045523
复制相似问题