[英]Improving efficiency of creating multidimensional array from function
这将是一个非常基本的问题,但我对两件事有点困惑。
我有一些数据存储在二维数组中,我们称之为z
。 我有两个单独的 2D arrays、 nxp
和nyp
,它们保存z
中每个元素的映射信息。 因此, nxp
和nyp
目前持有笛卡尔坐标,我想将其转换为极坐标。 在此之后,我将polar
定义为将给定的 (x,y) 转换为 (r, theta) 为:
import numpy as np
import math
def polar(x, y):
'''
Args:
x (double): x-coordinate.
y (double): y-coordinate.
Returns:
r, theta (in degrees).
'''
r = np.hypot(x, y)
theta = math.degrees(math.atan2(y, x))
return r, theta
但是从这一点开始,我认为我所做的一切都是解决这个问题的一种非常糟糕的方法。 理想情况下,我只想输入笛卡尔坐标 arrays 并取回极坐标 arrays 但这似乎不适用于我定义的 function (这可能是因为我已将输入类型隐式定义为双精度但我希望 python 会是能够在这里超载)。
r, theta = polar(nxp, nyp)
追溯是:
.... in polar
theta = math.degrees(math.atan2(y,x))
TypeError: only size-1 arrays can be converted to Python scalars
所以我现在正在实施将所有内容转换为一维列表并迭代以填充r
和theta
。 例如
nxp_1D = nxp.ravel()
nyp_1D = nyp.ravel()
for counter, value in enumerate(nxp_1D):
r, theta = polar(value, nyp_1D[counter])
这个确切的实现是错误的,因为它只返回r
和theta
的单个值,而不是填充值列表。
更一般地说,尽管出于某些原因我真的不喜欢这种方法。 对于这个问题,它看起来是一个非常严厉的解决方案。 除此之外,我可能想稍后做一些contourf
图,这将需要将r
和theta
转换回其原始数组形状。
有没有更简单、更有效的方法来创建 2D arrays r
和theta
? 是否可以通过更改我的polar
function 定义或使用列表理解来创建它们?
感谢您的任何回复。
是的,好的,所以这是一个非常简单的修复。 感谢@user202729 和@Igor Raush。 很简单:
def polar(x, y)
r = np.hypot(x, y)
theta = np.arctan2(y, x)
return r, theta
.....
r, theta = polar(nxp, nyp)
很抱歉这个问题是多么愚蠢,但感谢您的回复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.