2013-11-27 161 views
0

很可能有人已经问过这个,但是我找不到它。问题是如何将值分配给来自两个一维数组的二维数组。例如:从两个一维数组中分配值给二维数组

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后,它们变得不变。

回答

2

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.]]) 
+0

谢谢。投票,但重点是我的第一个数组是固定的,但不是所有的值。所以在实际情况下,我实际上使用'np.where',因此第一个值为1,否则第一个向量的所有坐标都不是'1'。有些也是'0'。但是,谢谢我会更新它。 – Cupitor

1

第一,但绝对没有理由创建原始zeros数组你坚持在a,永远不会引用,并取代补使用相同的名字来排列不同的数组。第二,如果要创建与b相同的形状和dtype的数组,但使用全部1的数组,请使用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))