在逻辑中使用 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)
或None
与np.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
我在 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)
或None
与np.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