如何检查python对象是否是numpy ndarray

Jaf*_*ado 5 python arrays performance types numpy

我有一个函数,它将数组作为输入并对其进行一些计算。输入数组可能是也可能不是 numpy ndarray(可能是列表、pandas 对象等)。

在函数中,我将输入数组(无论其类型如何)转换为 numpy ndarray。但是对于大型数组,这一步的计算成本可能会很高,尤其是在 for 循环中多次调用该函数时。

因此,只有当输入数组还不是 numpy ndarray 时,我才想将其转换为 numpy ndarray。

我怎样才能做到这一点?

import numpy as np

def myfunc(array):
    # Check if array is not already numpy ndarray
    # Not correct way, this is where I need help
    if type(array) != 'numpy.ndarray':
        array = np.array(array)

    # The computation on array
    # Do something with array
    new_array = other_func(array)
    return new_array
Run Code Online (Sandbox Code Playgroud)

yat*_*atu 6

你很接近,但你需要调用特定的类,即numpy.ndarray(在这里你只是与一个字符串进行比较)。同样为此,您还拥有内置的isinstance,也可以查看给定对象是否是另一个对象的实例:

def myfunc(array):
    # Check if array is not already numpy ndarray
    if not isinstance(array, np.ndarray):
        array = np.array(array)

    # The computation on array
    # Do something with array
    new_array = other_func(array)
    return new_array
Run Code Online (Sandbox Code Playgroud)


Ch3*_*teR 6

你可以isinstance在这里使用。

import numpy as np
a=np.array([1,2,...])
isinstance(a,np.ndarray)
#True
Run Code Online (Sandbox Code Playgroud)
def myfunc(array):
    return array if isinstance(array,np.ndarray) else np.array(array)
Run Code Online (Sandbox Code Playgroud)

array如果它np.ndarray已经是您转换array为的else ,您只需返回即可np.array


hpa*_*ulj 4

使用起来更简单asarray

def myfunc(arr):
    arr = np.asarray(arr)
    # The computation on array
    # Do something with array
    new_array = other_func(arr)
    return new_array
Run Code Online (Sandbox Code Playgroud)

如果arr已经是一个数组,asarray则不会进行复制,因此传递它不会有任何损失asarray。让numpy我们为您进行测试。

numpy函数通常通过asarray(或变体)传递它们的输入,只需确保类型是它们所期望的。