Python numpy.delete不从数组中删除列

Python numpy.delete不从数组中删除列,python,arrays,numpy,python-3.6,Python,Arrays,Numpy,Python 3.6,我正试图从数组中一次删除一列,根据文档,我认为以下方法应该可行: 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][:])

我正试图从数组中一次删除一列,根据文档,我认为以下方法应该可行:

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][:])
原始矩阵是所有输入数据

这不会导致删除任何列或对数组进行任何其他更改。上述代码段的初始输出为:

(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]]
delete命令根本不会更改矩阵的形状。

返回已删除元素的输入数组的副本

返回一个新数组,沿轴删除子数组

numpy中没有就地删除数组元素

由于
np.delete
返回一个副本,并且不修改输入,因此无需手动复制
所有输入数据:

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

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

根据
numpy.delete
返回指定列已删除的副本。还要注意,当您从数组中连续删除列时,
n
对于
n>=5
无效。您应该在while
循环中应用
,并始终删除第一个循环。@我认为您的错误主要是因为一个原因:
所有输入数据都不会被修改。其余的都是这样。@a_gue你又错了。数组在每次迭代中都是不同的。也许你应该试着在评论之前运行代码。正如我所理解的,OP希望一次删除一列,而不是连续删除。原始数组在每次循环迭代中都会被复制,这强烈表明不打算修改数组。但是猜测一个人的意图是毫无用处的。OP迟早会澄清这一点。删除的评论让我看起来像在自言自语:)谢谢。从使用的语言和代码两方面来看,您对我的意图的解释都是正确的。使用切片表示法(实际上是索引)来删除单个列需要复制数组,就像
delete