Python 用不同的形状复制值连接数组

Python 用不同的形状复制值连接数组,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,我有一个数组的形状:(15,2)。我还有另一个带有值的数组:[0,3,5] 我想在第一个数组中用第二个数组中的值创建另一列,其中前5行的值为0,第6-10行的值为3,最后5行的值为5 像这样: [0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5] 有任何numpy方法可以做到这一点吗 谢谢 使用 将第二个数组转换为二维“向量”数组,其中每行有一列 然后简单地 b = np.array([[i, i +1] for i in

我有一个数组的形状:
(15,2)
。我还有另一个带有值的数组:
[0,3,5]

我想在第一个数组中用第二个数组中的值创建另一列,其中前5行的值为0,第6-10行的值为3,最后5行的值为5

像这样:

[0,
 0,
 0,
 0,
 0,
 3,
 3,
 3,
 3,
 3,
 5,
 5,
 5,
 5,
 5]
有任何numpy方法可以做到这一点吗

谢谢

使用

  • 将第二个数组转换为二维“向量”数组,其中每行有一列
然后简单地

b = np.array([[i, i +1] for i in range(15)]) # some example 15x2 array
print(np.concatenate((b, a), axis=1)) 
输出是

array([[ 0,  1,  0],
       [ 1,  2,  0],
       [ 2,  3,  0],
       [ 3,  4,  0],
       [ 4,  5,  0],
       [ 5,  6,  3],
       [ 6,  7,  3],
       [ 7,  8,  3],
       [ 8,  9,  3],
       [ 9, 10,  3],
       [10, 11,  5],
       [11, 12,  5],
       [12, 13,  5],
       [13, 14,  5],
       [14, 15,  5]])
rand=np.random.random((15,2))#形状是(15,2)
VAL=np。数组([0,3,5])#形状为(3,)
res=np.concatenate([np.full((rand.shape[0]//vals.shape[0],),val)表示val中的val),axis=0)
物件
输出:

array([0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5])
array([[0.29759807, 0.60548479, 0.        ],
       [0.61242249, 0.46456274, 0.        ],
       [0.86172011, 0.2963868 , 0.        ],
       [0.91728575, 0.36366023, 0.        ],
       [0.56488556, 0.82130321, 0.        ],
       [0.59482141, 0.46148353, 3.        ],
       [0.7762271 , 0.25415058, 3.        ],
       [0.09176551, 0.9687253 , 3.        ],
       [0.06473259, 0.34686598, 3.        ],
       [0.69542414, 0.15540001, 3.        ],
       [0.02880707, 0.23169327, 5.        ],
       [0.90004256, 0.22145591, 5.        ],
       [0.61596969, 0.46807342, 5.        ],
       [0.02263769, 0.68522023, 5.        ],
       [0.81777274, 0.58145853, 5.        ]])
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 5.]
 [0. 0. 5.]
 [0. 0. 5.]
 [0. 0. 5.]
 [0. 0. 5.]]
最后,

final=np.hstack((rand,res.reformate(15,1)))
最终的
输出:

array([0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5])
array([[0.29759807, 0.60548479, 0.        ],
       [0.61242249, 0.46456274, 0.        ],
       [0.86172011, 0.2963868 , 0.        ],
       [0.91728575, 0.36366023, 0.        ],
       [0.56488556, 0.82130321, 0.        ],
       [0.59482141, 0.46148353, 3.        ],
       [0.7762271 , 0.25415058, 3.        ],
       [0.09176551, 0.9687253 , 3.        ],
       [0.06473259, 0.34686598, 3.        ],
       [0.69542414, 0.15540001, 3.        ],
       [0.02880707, 0.23169327, 5.        ],
       [0.90004256, 0.22145591, 5.        ],
       [0.61596969, 0.46807342, 5.        ],
       [0.02263769, 0.68522023, 5.        ],
       [0.81777274, 0.58145853, 5.        ]])
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 5.]
 [0. 0. 5.]
 [0. 0. 5.]
 [0. 0. 5.]
 [0. 0. 5.]]

您可以使用numpy内置的
repeat
stack
ing:

a = np.zeros((15,2))
b = np.array([0,3,5])
np.hstack((a, np.repeat(b,5)[:,None]))
输出:

array([0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5])
array([[0.29759807, 0.60548479, 0.        ],
       [0.61242249, 0.46456274, 0.        ],
       [0.86172011, 0.2963868 , 0.        ],
       [0.91728575, 0.36366023, 0.        ],
       [0.56488556, 0.82130321, 0.        ],
       [0.59482141, 0.46148353, 3.        ],
       [0.7762271 , 0.25415058, 3.        ],
       [0.09176551, 0.9687253 , 3.        ],
       [0.06473259, 0.34686598, 3.        ],
       [0.69542414, 0.15540001, 3.        ],
       [0.02880707, 0.23169327, 5.        ],
       [0.90004256, 0.22145591, 5.        ],
       [0.61596969, 0.46807342, 5.        ],
       [0.02263769, 0.68522023, 5.        ],
       [0.81777274, 0.58145853, 5.        ]])
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 5.]
 [0. 0. 5.]
 [0. 0. 5.]
 [0. 0. 5.]
 [0. 0. 5.]]

谢谢有一个问题,什么是
[:,None]
切片?@joann2555
None
为数组添加了一个额外的维度(在添加的地方,这里是
[:,None]
中的第二维度)。它是
np.newaxis
的别名。基本上,我们正在添加另一个维度,这样当我们堆叠时,我们将正确的维度堆叠在一起。