从3D Numpy数组中删除元素

时间:2018-10-22 10:58:40

标签: python arrays numpy

假设我有3d numpy数组,如下所示:

arr = np.ndarray(shape = (3,3,3), dtype=np.float32)


array([[[2.3694278e-38, 2.3694278e-38, 2.3694278e-38],
    [2.3694278e-38, 2.3694278e-38, 2.3694278e-38],
    [2.3694278e-38, 2.3694278e-38, 2.3694278e-38]],

   [[2.3694278e-38, 2.3694278e-38, 2.3694278e-38],
    [2.3694278e-38, 2.3694278e-38, 2.3694278e-38],
    [2.3694278e-38, 2.3694278e-38, 2.3694278e-38]],

   [[2.3694278e-38, 2.3694278e-38, 2.3694278e-38],
    [2.3694278e-38, 2.3694278e-38, 2.3694278e-38],
    [2.3694278e-38, 2.3694278e-38, 2.3694278e-38]]], dtype=float32)

我希望能够从此数组中删除任意行。例如,如果要删除第一行,则要获取以下数组:

array([[[2.3694278e-38, 2.3694278e-38, 2.3694278e-38],
    [2.3694278e-38, 2.3694278e-38, 2.3694278e-38],
    [2.3694278e-38, 2.3694278e-38, 2.3694278e-38]],

   [[2.3694278e-38, 2.3694278e-38, 2.3694278e-38],
    [2.3694278e-38, 2.3694278e-38, 2.3694278e-38],
    [2.3694278e-38, 2.3694278e-38, 2.3694278e-38]]], dtype=float32)

但是这个问题不仅仅是删除第一行。我希望能够删除我想要的行。我尝试了np.delete()函数,但无法完全得到我想要的。有人可以证明怎么做吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试:

x = np.delete(arr, 0, axis=0)

第一个数组(arr):

   [[[-3.5406988e-10  4.5735579e-41  4.8186282e-38]
  [ 0.0000000e+00 -2.4307778e-10  4.5735579e-41]
  [-2.2672175e-10  4.5735579e-41 -5.2388177e-11]]

 [[ 4.5735579e-41 -1.2597114e-09  4.5735579e-41]
  [-1.2705312e-09  4.5735579e-41 -2.1648838e-10]
  [ 4.5735579e-41 -2.4543772e-19  4.5735579e-41]]

 [[-2.4543917e-19  4.5735579e-41 -6.6015360e-11]
  [ 4.5735579e-41 -2.4544351e-19  4.5735579e-41]
  [-2.4199687e-10  4.5735579e-41 -1.2076065e-09]]]

新阵列(x):

[[[ 4.5735579e-41 -1.2597114e-09  4.5735579e-41]
  [-1.2705312e-09  4.5735579e-41 -2.1648838e-10]
  [ 4.5735579e-41 -2.4543772e-19  4.5735579e-41]]

 [[-2.4543917e-19  4.5735579e-41 -6.6015360e-11]
  [ 4.5735579e-41 -2.4544351e-19  4.5735579e-41]
  [-2.4199687e-10  4.5735579e-41 -1.2076065e-09]]]

答案 1 :(得分:0)

请勿使用np.delete

np.delete通常会不必要地创建副本。而是使用basic slicing返回视图。如果您仅提供一个切片,则只会对第一个维度进行切片。

arr_sliced = arr[1:]

您可以根据需要明确创建副本:

arr_sliced = arr[1:].copy()