我正在尝试从数组中逐个删除每个列,并根据文档和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]]
删除命令根本不会改变矩阵的形状。
答案 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。