操纵numpy ndarrays中的数组

时间:2018-03-19 13:55:17

标签: python arrays numpy

如何在python中的numpy ndarray中操作数组?

例如,如果我有这样的数组

a1 = np.array([1,1,1,1],[2,2,2,2],[3,3,3,3])
>>
[[1 1 1 1]
 [2 2 2 2]
 [3 3 3 3]]

我希望在数组中交换一行或多行。

例如,我想在第一个索引处插入数组[0,0,0,0],所以它看起来像这样:

[[0 0 0 0]
 [2 2 2 2]
 [3 3 3 3]]

或者如果我有这样的第二个数组

a2 = np.array([1,2,3,4],[5,6,7,8])
>>
[[1 2 3 4]
 [5 6 7 8]]

我想让它替换我的第一个数组的前两行:

[[1 2 3 4]
 [5 6 7 8]
 [3 3 3 3]]

如果速度是一个重要因素,我该如何进行这些操作?

1 个答案:

答案 0 :(得分:1)

它非常谨慎:

t = np.array([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]])
t[0, :] = np.zeros(t.shape[1])

只需使用t[0, :]访问第一行即可。我在这里np.zeros使用,因为我非常确定这是初始化零向量的最快方法。

第二种情况基于相同的逻辑。

t = np.array([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]])
t2 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
t[0:2, :] = t2

实际上,t[0, :]表示第一行,列中的所有元素,可以缩短为t[0]t[0:2]表示从索引0到索引2的所有行(不包括在内)。

关于速度......

$ timeit t[0:2] = t2
805 ns ± 2.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

无需过度复杂化这件事;)