连接NumPy数组

时间:2017-02-02 18:18:22

标签: python numpy

我想从一个空的NumPy数组开始,然后按顺序向它添加行(所有行的长度相同)。但是,在开始时,我不知道行的长度,也不知道我将添加多少行。我怎么能这样做?

所以我的三行:

for i in df.index:
    for comp in compDict:
        competitor = df.loc[i,'seller'].lower()
        if competitor.find(comp) > -1:
             do something
        else:
             df.loc[i+1,'seller'] = comp

以下是我的尝试:

a = np.array([1, 1, 1])
b = np.array([2, 2, 2])
c = np.array([3, 3, 3])

这不起作用,因为它将x = [] x = np.concatenate(x, a) x = np.concatenate(x, b) x = np.concatenate(x, c) a连接成一个长度为6的单个数组,而不是一个大小为(2,3)的数组。 有什么帮助吗?

3 个答案:

答案 0 :(得分:2)

收集列表中的所有行,然后使用vstack

a = np.array([1, 1, 1])
b = np.array([2, 2, 2])
c = np.array([3, 3, 3])
x = np.vstack([a,b,c])

答案 1 :(得分:0)

而不是以

开头
x = []
你可以说

x = numpy.zeros([0, 3])    # 2-dimensional array with 0 rows and 3 columns

然后以这种方式添加行:

x = numpy.vstack([x, a])
x = numpy.vstack([x, b])
x = numpy.vstack([x, c])

...但是正如user2357112所指出的那样,从列表开始,x.append(each_array)更有效率,并且只将数组列表连接成一个numpy.ndarray权利结束:

x = []
x.append(a)
x.append(b)
x.append(c)
x = numpy.vstack(x)

注意:numpy.concatenate([x,a])正朝着你没有预料到的方向努力,因为numpy.concatenate的默认方向确实是axis=0,这通常被认为是行在二维数组中的行方向,您的数组abc 二维数组因此不能被认为是单行"行"首先。它们只有 具有 维度0,因此它们的现有元素沿着维度0变化 - 与您进行连接的维度相同。要执行您想要的操作,您可能必须使用双括号来定义它们,如a = numpy.array([[1,1,1]])中所示,或者在连接之前通过说b = b[numpy.newaxis, :]将它们从现有的1维状态转换为它们。 numpy.vstack隐含地为你做后者。

答案 2 :(得分:0)

另一种方法是使用numpy.concatenate。它比numpy.vstacknumpy.hstack更通用,因为它允许您选择连接矢量/矩阵/数组的轴。

示例:

>>> X, Y, Z, T = numpy.random.randint(low=0, high=10, size=(4, 3, 1), dtype='I')
>>> numpy.concatenate((X, Y, Z, T), axis=1)
array([[0, 7, 1, 7],
       [8, 4, 7, 7],
       [1, 9, 9, 7]], dtype=uint32)