我必须删除数组的最后三行。它是列表,但我必须将其转换为数组,以便可以使用np.delete函数
我尝试了np.delete函数。它将按列而不是按行删除。
我要删除行而不是列。当我将轴更改为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行。
答案 0 :(得分:2)
不要删除numpy。删除会触发重新分配,这很昂贵。便宜(适当)的解决方案是仅使用索引创建视图:
var firstField = FocusNode();
var secondField = FocusNode();
@override
Widget build(BuildContext context) {
return Column(children: <Widget>[
TextFormField(
focusNode: firstField,
onChanged: (text) {
print("First field: $text");
},
),
TextFormField(
focusNode: secondField,
onChanged: (text) {
if (text.length <= 0) {
FocusScope.of(context).requestFocus(firstField);
}
print("Second field: $text");
},
)
]);
}
答案 1 :(得分:0)
您需要的是轴和对象:
语法:numpy.delete(arr, obj, axis=None)
object:是行号或列号或索引
轴:行为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]])
P.S。目前np.delete不支持负索引,将来会支持负索引,所以我建议您先获取要删除的行的索引,然后将其传递给np.delete()中的obj
答案 2 :(得分:0)
import numpy as np
import pandas as pd
df = ([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])
series = pd.DataFrame(df)
series1 = series.drop([2,3,4])
print(series1)
series1 = series.drop(series.index[2,3,4]
print(series1)
答案 3 :(得分:0)
最简单的方法是只使用基本索引
>>>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.delete(arr,obj,axis = None)的对象参数中不包含负索引
此外,如果数组大小很大,那么提供要删除的每一行,每一列或每个元素的索引就变得很麻烦。
>>>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]])