如何避免多次isinstance检查,实现numpy.array类型按需转换
关于numpy.array类型转换的两个问题
1. 有没有内置函数实现“非目标类型才转换”?
直接用numpy.asarray()就能解决这个问题。这个函数的逻辑刚好贴合你的需求:如果输入已经是numpy.ndarray类型且dtype匹配,就直接返回原对象;如果是list这类可转换为数组的类型,就自动转成numpy.ndarray。完全不用自己写isinstance检查,示例代码如下:
import numpy as np # 输入是list,自动转为数组 list_data = [1, 2, 3] arr1 = np.asarray(list_data) # 输入已经是数组,直接返回原对象 arr2 = np.array([4, 5, 6]) arr3 = np.asarray(arr2) print(arr2 is arr3) # 输出 True,说明是同一个对象
对比numpy.array():如果输入已经是数组,np.array()默认会创建副本(可通过copy=False参数修改),而np.asarray()默认不会生成副本,更符合你“不做多余操作”的要求。
2. 将变量转换为其已有类型会产生影响吗?
分两种情况来看:
- 用
np.array()转换已有的numpy数组:默认会创建新的数组副本,这会额外占用内存,要是数组规模很大,还会带来性能开销。不过可以通过设置copy=False参数避免生成副本,此时效果和np.asarray()一致。 - 用
np.asarray()转换已有的numpy数组:不会创建副本,直接返回原对象,完全没有额外开销和影响。
内容的提问来源于stack exchange,提问作者sjd
相关产品推荐
相关产品推荐

