我是来自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风格吗?
答案 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的相应子数组。