Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在numpy数组前面添加列_Python_Arrays_Numpy - Fatal编程技术网

Python 在numpy数组前面添加列

Python 在numpy数组前面添加列,python,arrays,numpy,Python,Arrays,Numpy,我有一个numpy阵列: array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 现在,我想在它前面添加一列包含所有元素的元素,以获得: array([[1, 1, 2, 3], [1, 4, 5, 6], [1, 7, 8, 9]]) 我看到很多关于我的问题的帖子,但是没有一个能解决我的问题。我尝试了np.concatenatenp.appendnp.hstack,但不幸的是,它们都不起作用。只需使用np.c

我有一个numpy阵列:

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
np.hstack
,但不幸的是,它们都不起作用。

只需使用
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]
——它添加了一个新维度

如何将0更改为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]])

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
我喜欢这样:

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

在这种情况下包含额外维度的另一个好方法是使用
None
np.array([0,0,0])[:,None]
@kiliantics
np.newaxis
只是
None
的别名,请参见示例
None is np.newaxis=True
。但我认为它更明确一点,因此在回答学习numpy的人的问题时更可取。不过,谢谢你的评论,这可能会对未来的访问者有所帮助+1@MSeifert,你的解决方案很有效。但是当我试图泛化它时,它给了我一个错误:
np.concatenate((np.ones((3,3))[:,np.newaxis],arr),axis=1)
给我一个错误:ValueError:所有输入数组必须有相同数量的dimensions@BishwajitPurkaystha如果您想预先添加一个2D数组,那么只需删除
[:,np.newaxis]
part。如果您编辑您的答案以供将来参考,那就更好了。谢谢