在逻辑中使用 numpy 形状输出

Using numpy shape output in logic

我在 Windows 7 上使用 Python 2.7.5。由于某些原因 python 不喜欢我使用我的 numpy 数组的维度之一if 语句中的比较器:

a = np.array([1,2,3,4])
# reshapes so that array has two dimensions
if len(np.shape(a)) == 1:
    a = np.reshape(a, (1, np.shape(a)))

b = np.shape(a)[0]

if b <= 3:
    print 'ok'

我创建了一个一维 numpy 数组(实际上 'a' 是一个可能是一维或二维的输入)。然后我重塑它以形成一个 2D numpy 数组。我尝试使用新创建的维度的大小作为比较器,但出现错误:"TypeError: an integer is required"

我还尝试 "int(b)" 在 if 语句中将长整数转换为普通整数,但它给出了相同的错误。如果我这样做 "type(b)",它会给我 "type 'long'"。我觉得我以前做过这个没有任何问题,但我找不到任何例子。我如何将一维数组更改为二维数组?感谢任何帮助。

你正在用 np.shape 创建一个元组,所以你传递了 (1,(4,)) 所以错误与你的 if 无关,它是 if 内部发生的事情,你需要使用np.shape(a)[0] 但我不完全确定你要做什么:

 np.shape(a)[0]

或者干脆 a.shape[0]

有问题的行是 a = np.reshape(a, (1, np.shape(a)))

要在 a 前面添加一个轴,我建议使用:

a = a[np.newaxis, ...]

print a.shape # (1, 4)

Nonenp.newaxis做同样的事情。

看起来您正在尝试做与 np.atleast_2d 相同的事情:

def atleast_2d(*arys):   # *arys handles multiple arrays
    res = []
    for ary in arys:
        ary = asanyarray(ary)
        if len(ary.shape) == 0 :
            result = ary.reshape(1, 1)
        elif len(ary.shape) == 1 :  # looks like your code!
            result = ary[newaxis,:]
        else :
            result = ary
        res.append(result)
    if len(res) == 1:
        return res[0]
    else:
        return res

In [955]: a=np.array([1,2,3,4])
In [956]: np.atleast_2d(a)
Out[956]: array([[1, 2, 3, 4]])

或者它是一个列表:

In [961]: np.atleast_2d([1,2,3,4])
Out[961]: array([[1, 2, 3, 4]])

您还可以测试 ndim 属性:a.ndim==1