使用其他行

时间:2015-05-25 16:46:36

标签: python arrays numpy

我有一个2d numpy数组,例如:

[[1, 2, 3, 4, 5 ]
 [6, 7, 8, 9, 10]
 [11,12,13,14,15]
 [16,17,18,19,20]
 [21,22,23,24,25]
 [26,27,28,29,30]]

我想用其他行的部分覆盖某些行的部分。例如,我想用第0行的第2和第3值覆盖第1行的第2和第3值。行只能是捐赠者"或者"收件人",而不是两者。

到目前为止,我已经设置了这个方法,我有一个1D数组标记某些行为"捐赠者",例如

`donors = np.array([0,2]) 

和一维数组将某些行标记为收件人,例如

`recips = np.array([1,3])

和一个指定要覆盖的位置的数组,例如:

`positions_to_overwrite = np.array([2,3],[3,4]]) 

所以我想在这里发生的是第1行的第2和第3个值(从零开始计数)被第0行的第2和第3值以及第3行的第3和第4值覆盖被第2行的第3和第4值覆盖。这会给我:

[[1, 2, 3, 4, 5 ]
 [6, 7, 3, 4, 10]
 [11,12,13,14,15]
 [16,17,18,14,15]
 [21,22,23,24,25]
 [26,27,28,29,30]]

希望这是有道理的。如果解决方案涉及以不同/更好的方式表示应该从一行转移到另一行的信息,那就完全没问题了。

1 个答案:

答案 0 :(得分:0)

一种方法假设A为2D输入数组 -

A[recips[:,None],positions_to_overwrite] = A[donors[:,None],positions_to_overwrite]

一些解释positions_to_overwrite的每一行代表donorsrecips的列索引。现在,donorsrecips都表示要操作的行索引。因此,我们需要将donorsrecips都转换为列向量,以便它们的每个元素都对应positions_to_overwrite的每一行。这有点像“广播”,但用于索引目的。