[英]How to replace elements of preallocated np.array in Python, matlab style
我是来自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风格?
简单的方法是-
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个元素为整数(以及所有其他条目:)的选择元组将返回尺寸为N-1的相应子数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.