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

numpy.delete not removing column from array

我试图一次从数组中删除每一列,并且根据文档和 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]]

删除命令根本没有改变矩阵的形状。

np.delete returns 删除了元素的输入数组的副本。

Return a new array with sub-arrays along an axis deleted.

numpy中没有数组元素的原位删除。

因为np.deletereturns复制了并且不修改输入所以不需要手动复制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][:])

从链接问题考虑:

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]])

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