有没有比以下代码更高效的方法来交换numpy 1D数组中的两个值?
input_seq = arange(64)
ix1 = randint(len(input_seq))
ixs2 = randint(len(input_seq))
temp = input_seq[ix2]
input_seq[ix2] = input_seq[ix1]
input_seq[ix1] = temp
有没有比以下代码更高效的方法来交换numpy 1D数组中的两个值?
input_seq = arange(64)
ix1 = randint(len(input_seq))
ixs2 = randint(len(input_seq))
temp = input_seq[ix2]
input_seq[ix2] = input_seq[ix1]
input_seq[ix1] = temp
我看到你正在使用numpy数组。在这种情况下,你还可以这样做:
input_seq[[ix1, ix2]] = input_seq[[ix2, ix1]]
input_seq[ix1], input_seq[ix2] = input_seq[ix2], input_seq[ix1]
我已将此问题标记为重复,答案在重复的帖子中有更多细节。
A = np.ones((2,2));
A[1,:] += 1;
A[0,:], A[1,:] = A[1,:], A[0,:];
现在 A
数组中全部都是 2。 - Thomas Arildsena=np.array([1,2,3]); b=np.array([4,5,6,7]); a[0:3], b[0:3] = b[0:3], a[0:3]
。结果将是b中的前3个值被移动到a中,但a的值不会复制到b中。这可能是由于传递指针(即a被b值覆盖,然后复制到b中)。这就是我认为这个问题有趣的原因。添加.copy()
可以帮助,例如a, b[0:3] = (b[0:3]).copy(), a
可以工作。 - sh37211