我有一个问题,需要删除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]]
数组的大小比这个大得多,但是想法是相同的。
答案 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。