我有一个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
,但不幸的是,他们都没有工作。
答案 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))