AttributeError:'numpy.ndarray'对象没有属性'units'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AttributeError:'numpy.ndarray'对象没有属性'units'相关的知识,希望对你有一定的参考价值。

我正在使用一个新的Python包(metpy),它包含几个子包 - 其中一个使用以下代码定义渐变和风收敛:

from __future__ import division
import numpy as np
from ..package_tools import Exporter
from ..constants import g
from ..units import atleast_2d, concatenate, units  
### the 'units' and 'constants' packages are within metpy

exporter = Exporter(globals())

def _gradient(f, *args, **kwargs):
    if len(args) < f.ndim:
        args = list(args)
        args.extend([units.Quantity(1., 'dimensionless')] * (f.ndim - len(args)))
    grad = np.gradient(f, *args, **kwargs)
    if f.ndim == 1:
        return units.Quantity(grad, f.units / args[0].units)
    return [units.Quantity(g, f.units / dx.units) for dx, g in zip(args, grad)]

def _stack(arrs):
    return concatenate([a[np.newaxis] for a in arrs], axis=0)


def _get_gradients(u, v, dx, dy):
# Helper function for getting convergence and vorticity from 2D arrays
    dudx, dudy = _gradient(u, dx, dy)
    dvdx, dvdy = _gradient(v, dx, dy)
    return dudx, dudy, dvdx, dvdy

def h_convergence(u, v, dx, dy):
    dudx, _, _, dvdy = _get_gradients(u, v, dx, dy)
return dudx + dvdy

当我尝试使用函数h_convergence时,我在此行中收到以下错误:

if f.ndim == 1:
    return units.Quantity(grad, f.units / args[0].units)
return [units.Quantity(g, f.units / dx.units) for dx, g in zip(args, grad)]

AttributeError: 'numpy.ndarray' object has no attribute 'units' 

我是Python的新手,但据我所知,它试图从metpy.units包调用'units',而不是numpy?任何人都可以建议吗?这不是我的代码,但是当我调用h_convergence函数时,我不知道为什么它不起作用。

答案

我只是尝试了相同的metpy包并遇到了同样的问题:

AttributeError: 'numpy.ndarray' object has no attribute 'units' 

如果你看一下metpy文档,1.2.1节,它们解释了如何构建这些单元。

由于我对收敛感兴趣,我做了以下事情:

from metpy.units import units

u1 = u*units('m/s')
v1 = v*units('m/s')

然后你应该为你的dx和dy做同样的事情:

dx = dlon * units('m')
dy = dlat * units('m')

最后的电话是:

conv = calc.kinematics.h_convergence(u1,v1,dx,dy)

这似乎对我有用。

另一答案

你试图得到unitsf)的f.units属性,我假设fnumpy.ndarray类型。 ndarrays没有units属性,所以你得到AttributeError

你需要检查你正在向_gradient喂食什么f,它似乎是来自uvh_convergence。他们的意思是numpy阵列,还是其他类型?

以上是关于AttributeError:'numpy.ndarray'对象没有属性'units'的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:类型对象'numpy.ndarray'在import numpy 1.15.4上没有属性'__array_function__'(示例代码

AttributeError:类型对象“numpy.ndarray”没有属性“__array_function__”

AttributeError:'module'对象没有属性'cbook'

AttributeError:“列表”对象没有属性“numpy”

AttributeError:“张量”对象没有属性“numpy”

AttributeError:“numpy.ndarray”对象没有属性“列”