如何删除数组中的多行

2024-09-30 22:12:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须删除数组的最后三行。它是一个列表,但我必须把它转换成数组,以便我可以使用np.删除功能

我试过了np.删除功能。它按列而不是按行删除。你知道吗

我想删除行而不是列。当我把轴改成1的时候。它给出了AxisError的错误消息:轴1超出维度1数组的界限

featureStr2=np.delete(f, slice(3,-1), axis=0)。我想删除最后3行。数组如下所示

1 2 3 4 5

6 7 8 9 20

11 23 54 6 7

2 3 4 5 6 7

1 2 3 4 5

代码的输出是。我希望输出删除最后3行。你知道吗


Tags: 代码功能消息列表错误npslice数组
3条回答

不要在numpy中删除。删除会触发重新分配,这很昂贵。便宜(合适)的解决方案是使用索引创建视图:

 arr = arr[:-3, ...]

最简单的方法就是使用基本的索引

>>>import numpy as np

>>>arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 20], [11, 23, 54, 6, 7], 
[2, 3, 4, 6, 7],[1,2, 3, 4, 5]])

>>>arr = arr[:-3]

array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 20]])

你知道吗np.删除(arr,obj,axis=None)在其object参数中不采用负索引

另外,如果数组的大小很大,那么提供要删除的每一行、每一列或每一个元素的索引就变得单调乏味。你知道吗

>>>np.delete(arr, [2,3,4], axis=0) 

array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 20]])

但是通过使用np.s_,可以为函数提供一个切片

>>>np.delete(arr, np.s_[2:5], axis=0)

array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 20]])

可以为np.s_提供负索引

>>>np.delete(arr, np.s_[-3:], axis=0)

array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 20]])

您需要的是轴和对象:

语法:numpy.delete(arr, obj, axis=None)

对象:是行号、列号或索引

轴:行为0,列为1

我假设你的数组是这样的。你知道吗

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

请注意np.删除不支持负索引,将来会支持,所以我建议您首先获取要删除的行的索引,然后将其传递给中的objnp.删除()

相关问题 更多 >