在循环numpy数组时返回具有相同尺寸的子数组

时间:2011-11-09 09:27:46

标签: python arrays numpy

考虑以下方便的循环习语。

import numpy

print "shape of"
x = numpy.array([['a', 'b'], ['c', 'd']])
print x
print "is", x.shape
for row in x:
    print "shape of", row, "is", row.shape

这给出了

shape of
[['a' 'b']
 ['c' 'd']]
is (2, 2)
shape of ['a' 'b'] is (2,)
shape of ['c' 'd'] is (2,)

我的问题是,在这种情况下,可以在返回具有形状(2,1)的数组时保留方便的for row in x习语吗?谢谢。 将子阵列的形状从(2,)转换为(2,0)的函数将是正常的。 E.g。

for row in x:
    print "shape of", somefunc(row), "is", row.shape

返回

shape of ['a' 'b'] is (2,1)

2 个答案:

答案 0 :(得分:2)

您可以使用numpy.expand_dim来增加任何numpy数组的排名:

In [7]: x=np.array([1,2,3,4])

In [8]: x.shape
Out[8]: (4,)

In [9]: np.expand_dims(x,axis=-1).shape
Out[9]: (4, 1)

答案 1 :(得分:1)

我不明白为什么你会这么想,但你可以尝试一下:

for row in x:
    print "shape of", row, "is", numpy.reshape(row, (1, row.size)).shape

在我看来,1d阵列更容易处理。因此,将它重塑为“1d矩阵”并没有多大意义。