可以使用numpy.asarray功能,任何序列式輸入轉換爲數組:
>>> import numpy
>>> numpy.asarray([1,2,3])
array([1, 2, 3])
>>> numpy.asarray(numpy.array([2,3]))
array([2, 3])
>>> numpy.asarray(1)
array(1)
>>> numpy.asarray((2,3))
array([2, 3])
>>> numpy.asarray({1:3,2:4})
array({1: 3, 2: 4}, dtype=object)
需要注意的是,如文檔說不進行復制,如果輸入已經是一個ndarray這一點很重要。這是非常好的,因爲你可以傳入一個現有的數組,它只是返回相同的數組。
將其轉換爲numpy數組後,只需檢查長度是否爲需求。喜歡的東西:
>>> def f(x):
... x = numpy.asarray(x)
... if len(x) != 2:
... raise Exception("invalid argument")
...
>>> f([1,2])
>>> f([1,2,3])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in f
Exception: invalid argument
更新: 既然你這麼問,這裏有一個「神奇」的功能,將除外* ARGS作爲數組也:
>>> def f(*args):
... args = numpy.asarray(args[0]) if len(args) == 1 else numpy.asarray(args)
... return args
...
>>> f(7,3,5)
array([7, 3, 5])
>>> f([1,2,3])
array([1, 2, 3])
>>> f((2,3,4))
array([2, 3, 4])
>>> f(numpy.array([1,2,3]))
array([1, 2, 3])
會不會有它考慮的方式一個個體變量列表(存儲在* args中的列表)也是一個數組?所以我可以調用'function(x,y)','function([x,y])','function(numpy.array([[x],[y]]))'...?如果len(args)== 1 else numpy.asarray(args)'' – heltonbiker
* ARGS – jterrace
更新的問題帶有「def f(* args)''並且使用''numpy.asarray(args [0])' – jterrace