繁体   English   中英

提高从function创建多维数组的效率

[英]Improving efficiency of creating multidimensional array from function

这将是一个非常基本的问题,但我对两件事有点困惑。

我有一些数据存储在二维数组中,我们称之为z 我有两个单独的 2D arrays、 nxpnyp ,它们保存z中每个元素的映射信息。 因此, nxpnyp目前持有笛卡尔坐标,我想将其转换为极坐标。 在此之后,我将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

所以我现在正在实施将所有内容转换为一维列表并迭代以填充rtheta 例如

nxp_1D = nxp.ravel()
nyp_1D = nyp.ravel()

for counter, value in enumerate(nxp_1D):
    r, theta = polar(value, nyp_1D[counter])

这个确切的实现是错误的,因为它只返回rtheta的单个值,而不是填充值列表。

更一般地说,尽管出于某些原因我真的不喜欢这种方法。 对于这个问题,它看起来是一个非常严厉的解决方案。 除此之外,我可能想稍后做一些contourf图,这将需要将rtheta转换回其原始数组形状。

有没有更简单、更有效的方法来创建 2D arrays rtheta 是否可以通过更改我的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM