numpy.delete没有从数组中删除列

时间:2017-07-12 07:26:38

标签: python arrays numpy python-3.6

我正在尝试从数组中逐个删除每个列,并根据文档和this question认为以下内容应该有效:

print(all_input_data.shape)

for n in range(9):
    print(n)
    testArray = all_input_data.copy()
    print(testArray.shape)
    np.delete(testArray,[n],axis=1)
    print(testArray.shape)
    print(testArray[0:1][:])

原始矩阵是all_input_data。

这不会导致删除任何列或对阵列生成任何其他更改。上面代码段的初始输出是:

(682120, 9)

0

(682120, 9)

(682120, 9)

[[  2.37000000e+02   1.60000000e+01   9.90000000e+01   1.04910000e+03
    9.29000000e-01   9.86000000e-01   8.43000000e-01   4.99290000e+01
    1.97000000e+00]]

删除命令根本不会改变矩阵的形状。

2 个答案:

答案 0 :(得分:2)

np.delete返回输入数组的副本,其中删除了元素。

  

返回一个新数组,并删除轴上的子阵列。

numpy中没有删除数组元素。

由于np.delete返回副本而不修改输入,因此无需手动制作all_input_data的副本:

import numpy as np
all_input_data = np.random.rand(100, 9)

for n in range(9):
    print(n)
    testArray = np.delete(all_input_data,[n],axis=1)
    print(testArray.shape)
    print(testArray[0:1][:])

答案 1 :(得分:1)

从链接问题考虑:

In [2]: a = np.arange(12).reshape(3,4)

In [3]: np.delete(a, [1,3], axis=1)
Out[3]:
array([[ 0,  2],
       [ 4,  6],
       [ 8, 10]])

In [4]: a
Out[4]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

换句话说,如果你想保存更改,你应该保存到一个新变量,但考虑到矩阵的大小,这是不切实际的。你可以做的是使用切片表示法索引。它解释为here