繁体   English   中英

如何在Matlab样式的Python中替换预分配的np.array的元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM