很可能其他人已经问过这个但我找不到了。问题是我如何从两个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
之后它们会变得不变。
答案 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]