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

2024-06-28 20:25:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在函数中,我将输入数组(无论其类型)转换为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

Tags: 对象函数numpy类型列表newforif
3条回答

使用asarray更简单:

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

如果arr已经是一个数组,asarray不会生成副本,因此通过asarray传递它不会受到惩罚。让numpy为您进行测试

numpy函数通常通过asarray(或变量)传递其输入,只要确保类型是它们期望的类型即可

您可以在这里使用isinstance

import numpy as np
a=np.array([1,2,...])
isinstance(a,np.ndarray)
#True

def myfunc(array):
    return array if isinstance(array,np.ndarray) else np.array(array)

如果它已经是一个np.ndarray,只需返回array,否则将array转换为np.array

很接近,但需要调用特定的类,即numpy.ndarray(这里您只是与字符串进行比较)。此外,您还有内置的^{},查看给定对象是否是另一个对象的实例:

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

相关问题 更多 >