使用数组或rec-array操作python中的非相邻单元格

时间:2011-07-25 21:02:34

标签: python arrays

我正在尝试同时更改数组的非相邻值,但它似乎不起作用。尝试下面的示例,代码不会中断,但值不会更改。我使用重新排列遇到了同样的问题。有没有人遇到过这个?有什么想法吗?例如:

import numpy as np

simulants = np.zeros([10, 5])

simulants[:, 4] =np.array([5,25, 10, 5, 45, 30, 60, 1, 80, 80])

simulants[simulants[:,4]==5][:,0]=np.array([1, 2])

1 个答案:

答案 0 :(得分:3)

索引的顺序很重要。尝试:

simulants[:,0][simulants[:,4]==5]=np.array([1,2])

订单之所以重要,是因为simulants[:,0]是一个视图,而 simulants[simulants[:,4]==5]是数组的(子)副本。 (修改数组的视图会修改基础数组。修改副本不会。)

simulants[:,0]是一个视图,因为它使用basic slicingsimulants[simulants[:,4]==5]是一个副本,因为它使用了一个触发advanced indexing的bool ndarray。


编辑:正如@eryksun在评论中指出的那样,使用单个索引可以更好地处理分配:

simulants[simulants[:,4]==5, 0] = np.array([1,2]