我正在尝试同时更改数组的非相邻值,但它似乎不起作用。尝试下面的示例,代码不会中断,但值不会更改。我使用重新排列遇到了同样的问题。有没有人遇到过这个?有什么想法吗?例如:
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])
答案 0 :(得分:3)
索引的顺序很重要。尝试:
simulants[:,0][simulants[:,4]==5]=np.array([1,2])
订单之所以重要,是因为simulants[:,0]
是一个视图,而
simulants[simulants[:,4]==5]
是数组的(子)副本。 (修改数组的视图会修改基础数组。修改副本不会。)
simulants[:,0]
是一个视图,因为它使用basic slicing。
simulants[simulants[:,4]==5]
是一个副本,因为它使用了一个触发advanced indexing的bool ndarray。
编辑:正如@eryksun在评论中指出的那样,使用单个索引可以更好地处理分配:
simulants[simulants[:,4]==5, 0] = np.array([1,2]