删除2d numpy数组的替代列和行

时间:2019-02-06 07:55:27

标签: python python-3.x

我有一个问题,需要删除2D numpy数组的替代列和行。

我尝试使用numpy.delete这样做,但结果并没有证明我想要成为...

for x in range(rows):
    if x %2 ==0:
        array_np=np.delete(array_np,1,axis=1)
for y in range(columns):
    if y %2 ==0:
        array_np=np.delete(array_np,1,axis=0) 

例如。

[[1,2,3,4],

 [5,6,7,8],

 [9,10,11,12],

 [13,14,15,16]]

预期输出:

[[1,3],

 [9,11]]

数组的大小比这个大得多,但是想法是相同的。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用list(range(1, array.shape[0], 2))生成奇数列表, 然后您可以构造所有需要删除的列的列表。

a = np.array([[1,2,3,4],
...  [5,6,7,8],
...  [9,10,11,12],
...  [13,14,15,16]])
>>> np.delete(a, range(1, a.shape[0], 2), axis=0)
array([[ 1,  2,  3,  4],
       [ 9, 10, 11, 12]])
>>> np.delete(a, range(1, a.shape[1], 2), axis=1)
array([[ 1,  3],
       [ 5,  7],
       [ 9, 11],
       [13, 15]])

如果将两者结合起来,就应该达到我的理解。

答案 1 :(得分:1)

import numpy as np

arr_np = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]])

arr_all_odd=np.delete(arr_np, list(range(1, arr_np.shape[0], 2)), axis=1)
arr_odd_odd=np.delete(arr_all_odd, list(range(1, arr_np.shape[1], 2)), axis=0)

print(arr_odd_odd)

输出:

[[ 1  3]
 [ 9 11]]

您可以用相同的方法制作arr_odd_even,arr_even_odd或arr_even_even。