从两个一维数组中将值分配给二维数组

时间:2013-11-27 01:15:58

标签: python arrays numpy

很可能其他人已经问过这个但我找不到了。问题是我如何从两个1D阵列为2D数组赋值。例如:

import numpy as np
#a is the 2D array. b is the 1D array and should be assigned 
#to second coordinate. In this exaple the first coordinate is 1.
a=np.zeros((3,2))
b=np.asarray([1,2,3])
c=np.ones(3)
a=np.vstack((c,b)).T

输出:

[[ 1.  1.]
 [ 1.  2.]
 [ 1.  3.]]

我知道我这样做的方式如此幼稚,但我确信应该采用一种方式来做到这一点。

P.S。在我正在处理的实际情况中,这是一个数组的子数组,因此我不能将第一个坐标从开头设置为1。整个数组的第一个坐标是不同的,但在应用np.where之后它们会变得不变。

3 个答案:

答案 0 :(得分:3)

2行怎么样?

>>> c = np.ones((3, 2))
>>> c[:, 1] = [1, 2, 3]

它证明了它的作用:

>>> c
array([[ 1.,  1.],
       [ 1.,  2.],
       [ 1.,  3.]])

或许,你想要np.column_stack

>>> np.column_stack(([1.,1,1],[1,2,3]))
array([[ 1.,  1.],
       [ 1.,  2.],
       [ 1.,  3.]])

答案 1 :(得分:1)

首先,绝对没有理由创建您坚持zeros的原始a数组,永远不会引用,并替换为具有相同名称的完全不同的数组。

其次,如果你想创建一个与b相同的形状和类型的数组,但要使用全部数组,请使用ones_like

所以:

b = np.array([1,2,3])
c = np.ones_like(b)
d = np.vstack((c, b).T

您当然可以将b扩展为3x1阵列而不是3阵列,在这种情况下,您可以使用hstack而不是需要vstack然后转置...但我不要以为这更简单:

b = np.array([1,2,3])
b = np.expand_dims(b, 1)
c = np.ones_like(b)
d = np.hstack((c, b))

答案 2 :(得分:1)

如果你坚持一行,请使用fancy indexing

>>> a[:,0],a[:,1]=[1,1,1],[1,2,3]