请考虑以下代码:
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。但有没有办法用矢量化(没有循环)?
将index_info
转换为元组并使用它来分配:
>>> initial[(*index_info,)]=value
>>> initial
array([[0. , 0. , 0. ],
[0. , 0.5, 0.5],
[0. , 0. , 0. ]])
请注意,不鼓励使用matrix
课程。请改用ndarray
。
你可以用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,)