如何用Python,matlab样式替换preallocated np.array的元素

时间:2017-04-29 12:26:04

标签: python matlab numpy

我是来自matlab的python新手。现在,当我想将matlab中的向量保存到预分配的矩阵时,我这样做(matlab代码)

a = zeros(5, 2)
b = zeros(5, 1)
# save elements of b in the first column of a
a(:, 1) = b

现在我在python中使用numpy。我真的不知道如何描述这个问题。我在这做什么基本上是这个

a = np.zeros([5, 2])
b = np.ones([5, 1])
a[:, 0] = np.reshape(b, a[:, 0].shape) 

因为以下解决方案无效:

a[:, 0] = b # Not working

有人能指出其他方法,更接近matlab风格吗?

1 个答案:

答案 0 :(得分:4)

简单的方法是 -

a[:,[0]] = b

示例运行 -

In [217]: a = np.zeros([5, 2])
     ...: b = np.ones([5, 1])
     ...: 

In [218]: a[:,[0]] = b

In [219]: a
Out[219]: 
array([[ 1.,  0.],
       [ 1.,  0.],
       [ 1.,  0.],
       [ 1.,  0.],
       [ 1.,  0.]])

基本上,通过使用标量a[:,0]的切片,减少了维度的数量(除去使用标量的维度)以进行赋值。当我们指定像a[:,[0]]这样的索引/索引列表时,会保留维度,即保留为2D,这样我们就可以分配b,这也是2D。让我们测试一下 -

In [225]: a[:,0].shape
Out[225]: (5,) # 1D array

In [226]: a[:,[0]].shape
Out[226]: (5, 1) # 2D array

In [227]: b.shape
Out[227]: (5, 1) # 2D array

作为参考,这里是切片方案的link。引用相关部分 -

  

整数i返回与i:i + 1相同的值,除了   返回对象的维数减少1。

     

特别是,具有第p个元素的选择元组是整数(以及所有其他元素)   entries :)返回维度为N - 1的相应子数组。