如何处理可以调整大小或未调整大小的python对象

时间:2013-02-01 18:37:47

标签: python numpy

我想编写接受可以未标注的数字参数x的函数,例如x = 1或大小,列表,元组或ndarray,比如x = np.array([1,2])。是否有一种编写处理这两种情况的代码的好方法?

作为一个具体的例子,假设目标是将x广播到一个数组(预定义的形状xshape)中,如果x只是一个数字,并在{{{}}时返回错误1}}是一个形状错误的数组。

x

除了嵌套import numpy as np import sys if np.shape(np.atleast_1d(x)) == (1,): x = np.ones(xshape) * x elif np.shape(x) != xshape: sys.exit("wrong shape for x") 的困难之外,上述代码似乎也有效。它似乎也违反了一些推荐的做法,例如x = [[2]]。任何建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是遵循numpy,它处理所有各种情况并隐藏您的复杂性。例如:

>>> import numpy as np
>>> xshape = (2,)
>>> np.ones(xshape) * 1
array([ 1.,  1.])
>>> np.ones(xshape) * [9, 8]
array([ 9.,  8.])
>>> np.ones(xshape) * [[9, 8]]
array([[ 9.,  8.]])
>>> # Wrong shape
>>> np.ones(xshape) * [[9, 8, 7]]
ValueError                                Traceback (most recent call last)
<ipython-input-28-dd8a3b87c22c> in <module>()
----> 1 np.ones(xshape) * [[9, 8, 7]]

ValueError: operands could not be broadcast together with shapes (2) (1,3) 

另一种相关方法是在函数/脚本的开头使用x = np.aarray(x)。如果x已经是一个数组,则没有任何反应,但如果x是标量或序列,则会创建一个具有相应形状的数组,然后您可以编写其余的代码x 1}}是一个数组(如果x无法转换为数组,则会引发错误。)