在Python中从数组中删除列

在Python中从数组中删除列,python,numpy,Python,Numpy,我有一个2D Python数组,我想从中删除某些列,但在代码运行之前,我不知道要删除多少列 我想循环原始数组中的列,如果任何一列中的行之和大约是某个值,我想删除整个列 我开始这样做的方式如下: for i in range(original_number_of_columns) if sum(original_array[:,i]) < certain_value: new_array[:,new_index] = original_array[:,i]

我有一个2D Python数组,我想从中删除某些列,但在代码运行之前,我不知道要删除多少列

我想循环原始数组中的列,如果任何一列中的行之和大约是某个值,我想删除整个列

我开始这样做的方式如下:

for i in range(original_number_of_columns)
    if sum(original_array[:,i]) < certain_value:
        new_array[:,new_index] = original_array[:,i]
        new_index+=1
但后来我意识到我必须首先定义新的_数组,并告诉Python它的大小。但是我不知道它会是多大的

我以前已经绕过了这个问题,首先在列上循环,找出我会损失多少,然后定义新的_数组,最后运行上面的循环-但是显然,有更有效的方法来做这些事情


谢谢。

您可以使用以下功能:

import numpy as np

a = np.array([
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
)

print a.compress(a.sum(0) > 15, 1)

[[3]
 [6]
 [9]]

您可以使用以下选项:

import numpy as np

a = np.array([
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
)

print a.compress(a.sum(0) > 15, 1)

[[3]
 [6]
 [9]]
我建议使用

我建议使用

没有屁股

my_2d_table = [[...],[...],...]
only_cols_that_sum_lt_x = [col for col in zip(*my_2d_table) if sum(col) < some_threshold]
new_table = map(list,zip(*only_cols_that_sum_lt_x))
与努比

a = np.array(my_2d_table)
a[:,np.sum(a,0) < some_target]
没有屁股

my_2d_table = [[...],[...],...]
only_cols_that_sum_lt_x = [col for col in zip(*my_2d_table) if sum(col) < some_threshold]
new_table = map(list,zip(*only_cols_that_sum_lt_x))
与努比

a = np.array(my_2d_table)
a[:,np.sum(a,0) < some_target]

您可能只需要折叠原始数组,但可能需要向后操作,首先删除最远的列。您可能只需要折叠原始数组,但可能需要向后操作,首先删除最远的列。问题已标记为numpy,因此不需要非numpy解决方案。另外,我相信a.sum0看起来比np.suma,0好,但那只是我。无论如何,高级索引的良好使用,我忘了你也可以使用布尔数组。。。我喜欢np.sum,因为它更明确。。。我可能会实际使用np.suma,axis=0这个问题被标记为numpy,所以不需要非numpy解决方案。另外,我相信a.sum0看起来比np.suma,0好,但那只是我。无论如何,高级索引的良好使用,我忘了你也可以使用布尔数组。。。我喜欢np.sum,因为它更明确。。。我可能会实际使用np.suma,axis=0