我想从一个空的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)的数组。
有什么帮助吗?
答案 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
,这通常被认为是行在二维数组中的行方向,您的数组a
,b
和c
不 二维数组因此不能被认为是单行"行"首先。它们只有 具有 维度0,因此它们的现有元素沿着维度0变化 - 与您进行连接的维度相同。要执行您想要的操作,您可能必须使用双括号来定义它们,如a = numpy.array([[1,1,1]])
中所示,或者在连接之前通过说b = b[numpy.newaxis, :]
将它们从现有的1维状态转换为它们。 numpy.vstack
隐含地为你做后者。
答案 2 :(得分:0)
另一种方法是使用numpy.concatenate
。它比numpy.vstack
或numpy.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)