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
。