繁体   English   中英

删除二维 numpy 数组的备用列和行

[英]Remove alternate columns and row of 2d numpy array

我有一个问题,我需要删除 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]]

数组的大小比这大得多,但想法是一样的。

您可以尝试使用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]])

如果您将两者结合起来,您应该实现我所理解的您想要的。

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM