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)
你很接近,但你需要调用特定的类,即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)
你可以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。
使用起来更简单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(或变体)传递它们的输入,只需确保类型是它们所期望的。
| 归档时间: |
|
| 查看次数: |
2908 次 |
| 最近记录: |