我有一个numpy数组,最初是零,如下所示:
v = np.zeros((5, 5))
v
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
我还有一组数组idx1
和idx2
。你知道吗
idx1
array([[0, 3],
[0, 4],
[1, 3],
[2, 4]])
idx2
array([[0, 1],
[0, 2],
[0, 4],
[1, 3]])
将每对值视为行和列索引。例如,在idx1
中,第一对(0, 3)
将成为v[0, 3]
的索引器,依此类推。你知道吗
我想首先在idx1
到1
指定的索引处设置值,然后在idx2
到0
指定的所有索引处设置值。你知道吗
另外,请注意,如果在某个数组中有一对(i, j)
,我想同时设置v[i, j]
和v[j, i]
。你知道吗
我的最终结果是:
array([[ 0., 0., 0., 1., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 1.],
[ 1., 0., 0., 0., 0.],
[ 0., 0., 1., 0., 0.]])
我目前通过以下方式实现这一目标:
def set_vals(x, i, j, v):
x[i, j] = x.T[i, j] = v
v = np.zeros((5, 5))
i1, j1 = idx1[:, 0], idx1[:, 1]
i2, j2 = idx2[:, 0], idx2[:, 1]
set_vals(v, i1, j1, 1)
set_vals(v, i2, j2, 0)
v # the result
不过,我相信有更好的办法。希望听到任何改进的想法/建议。谢谢!你知道吗
为了寻找更“紧凑”的表达方式,我得到了这个-
在python3.6+上,您可以使用
*
解包操作符来进一步减少这种情况:相关问题 更多 >
编程相关推荐