Python传递列表或Numpy数组

时间:2014-07-07 20:01:24

标签: python python-2.7 numpy

我想知道是否有人能够将一个python列表,一个numpy向量(shape(n,))或一个numpy向量(shape(n,1))传递给一个函数。我们的想法是概括一个函数,使三者中的任何一个都有效,而不会增加复杂性。

初步想法:

1) Use a type checking decorator function and cast to a standard representation.
2) Add type checking logic inline (significantly less ideal than #1).
3) ?

我一般不使用python内置数组类型,但怀疑这个问题的解决方案也会支持这些。

2 个答案:

答案 0 :(得分:3)

我认为最简单的方法是使用numpy.atleast_2d启动您的功能。然后,所有3种可能性都将转换为x.shape == (n, 1)情况,您可以使用它来简化您的功能。

例如,

def sum(x):
    x = np.atleast_2d(x)
    return np.dot(x, np.ones((x.shape[0], 1)))

atleast_2d会返回该数组的视图,因此如果您传入的内容已经是ndarray,则不会有太大的开销。但是,如果您打算修改x并因此想要制作副本,则可以执行x = np.atleast_2d(np.array(x))

答案 1 :(得分:2)

您可以使用以下命令将这三种类型转换为“规范”类型,即1dim数组:

arr = np.asarray(arr).ravel()

加入装饰者:

import numpy as np
import functools

def takes_1dim_array(func):
    @functools.wraps(func)
    def f(arr, *a, **kw):
        arr = np.asarray(arr).ravel()
        return func(arr, *a, **kw)
    return f

然后:

@takes_1dim_arr
def func(arr):
   print arr.shape