使用另一个数组中的值构建NumPy数组

问题描述 投票:1回答:2

请考虑以下代码:

import numpy as np 
index_info = np.matrix([[1, 1], [1, 2]])
value =  np.matrix([[0.5, 0.5]])
initial = np.zeros((3, 3))

我如何生成一个矩阵,final,其结构为initial,其中value指定的元素位于index_info指定的位置,没有for循环?在这个玩具示例中,请参见下文。

final =  np.matrix([[0, 0, 0], [0, 0.5, 0.5], [0, 0, 0]])

使用for循环,您可以轻松遍历index_info和value中的所有索引,并使用它来填充initial和form final。但有没有办法用矢量化(没有循环)?

python numpy vectorization
2个回答
2
投票

index_info转换为元组并使用它来分配:

>>> initial[(*index_info,)]=value
>>> initial
array([[0. , 0. , 0. ],
       [0. , 0.5, 0.5],
       [0. , 0. , 0. ]])

请注意,不鼓励使用matrix课程。请改用ndarray


1
投票

你可以用NumPy的array indexing做到这一点:

>>> initial = np.zeros((3, 3))

>>> row = np.array([1, 1])
>>> col = np.array([1, 2])

>>> final = np.zeros_like(initial)
>>> final[row, col] = [0.5, 0.5]
>>> final
array([[0. , 0. , 0. ],
       [0. , 0.5, 0.5],
       [0. , 0. , 0. ]])

这与@PaperPanzer的回答类似,他在row的一步中解压colindex_info。换一种说法:

row, col = (*index_info,)
© www.soinside.com 2019 - 2024. All rights reserved.