请考虑以下代码:
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。但有没有办法用矢量化(没有循环)?
答案 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
解压缩col
和index_info
。换句话说:
row, col = (*index_info,)