在numpy数组前面添加一列

时间:2016-11-26 02:32:11

标签: python arrays numpy

我有一个numpy数组:

Range("G2:G" & Range("C" & Rows.Count).End(xlUp).Row).Formula = "=CONCATENATE(C2,"", "",B2)"

现在我想在它前面添加一列所有的列来获取:

array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

我看到很多关于我的问题的帖子,但没有一个可以解决我的问题。我尝试了array([[1, 1, 2, 3], [1, 4, 5, 6], [1, 7, 8, 9]]) np.concatenate np.append,但不幸的是,他们都没有工作。

3 个答案:

答案 0 :(得分:2)

只需使用np.concatenate

>>> import numpy as np
>>> arr = np.array([[1, 2, 3],
                    [4, 5, 6],
                    [7, 8, 9]])

>>> np.concatenate((np.array([0,0,0])[:, np.newaxis], arr), axis=1)
array([[0, 1, 2, 3],
       [0, 4, 5, 6],
       [0, 7, 8, 9]])

hstack也有效:

>>> np.hstack((np.array([0,0,0])[:, np.newaxis], arr))
array([[0, 1, 2, 3],
       [0, 4, 5, 6],
       [0, 7, 8, 9]])

唯一"棘手"部分是两个数组必须具有相同数量的维度,这就是我添加[:, np.newaxis]的原因 - 这会增加一个新维度。

如何将零更改为1作为(简单)练习: - )

如果您想要添加2D数组,则必须删除[:, np.newaxis]部分:

np.concatenate((np.zeros((3,3), dtype=int), arr), axis=1)
array([[0, 0, 0, 1, 2, 3],
       [0, 0, 0, 4, 5, 6],
       [0, 0, 0, 7, 8, 9]])

答案 1 :(得分:1)

vstack表现得更好,而不必担心新轴,尽管MSeifert的回答可能更正确:

p = np.array([1,1,1])
q = np.array([[1,2,3],[4,5,6],[7,8,9]])

np.vstack((p,q.T)).T

答案 2 :(得分:0)

我更喜欢这样:

ones = np.ones((3,1)) #3 is a number of rows in your array.   
new_array = np.hstack((ones,arr))