首页 > 解决方案 > 如何删除子数组的结束元素?

问题描述

所以我创建了一个 numpy 数组:

import numpy as np

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

我正在尝试删除此数组子数组的结束元素:

a[0] = (a[0])[:-1]

并遇到这个问题:

a[0] = (a[0])[:-1] ValueError: 无法将输入数组从形状 (2) 广播到形状 (3)

为什么我不能改变它?我该怎么做?

标签: pythonnumpysub-array

解决方案


鉴于:

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

你可以做:

>>> a[:,0:2]
array([[1, 2],
       [4, 5],
       [7, 8]])

或者:

>>> np.delete(a,2,1)
array([[1, 2],
       [4, 5],
       [7, 8]])

然后在任何一种情况下,将其分配回,a因为结果是一个新数组。

所以:

>>> a=a[:,0:2]
>>> a
array([[1, 2],
       [4, 5],
       [7, 8]])

如果您只想删除3第一行,那是另一个问题。如果你有一个 python 列表数组,你只能这样做,因为子列表的长度不同。

例子:

>>> a = np.array([[1,2],[4,5,6],[7,8,9]])
>>> a
array([list([1, 2]), list([4, 5, 6]), list([7, 8, 9])], dtype=object)

如果你这样做,那就坚持使用 Python。您将失去 Numpy 的所有速度和其他优势。


如果“通用”是指 N x M 数组的每一行的最后一个元素,只需使用它.shape来查找维度:

>>> a
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
>>> a.shape
(3, 4)
>>> np.delete(a,a.shape[1]-1,1)
array([[ 1,  2,  3],
       [ 5,  6,  7],
       [ 9, 10, 11]])

或者,

>>> a[:,0:a.shape[1]-1]
array([[ 1,  2,  3],
       [ 5,  6,  7],
       [ 9, 10, 11]])

推荐阅读