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

时间:2018-03-03 20:11:41

标签: python numpy vectorization

请考虑以下代码:

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,其结构为initialvalue指定的元素位于index_info指定的位置而没有for循环?在这个玩具示例中,请参见下文。

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

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

2 个答案:

答案 0 :(得分:2)

index_info转换为元组并使用它来指定:

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

请注意,不建议使用matrix课程。请改用ndarray

答案 1 :(得分: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,)
相关问题