Python 如何删除子阵列的结束元素?

Python 如何删除子阵列的结束元素?,python,numpy,sub-array,Python,Numpy,Sub Array,所以我创建了一个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) 为什么我不能改变它? 我该怎么做?给定: >>> a array([[1, 2, 3], [4, 5, 6],

所以我创建了一个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)

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

给定:

>>> a
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
你可以做:

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

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

因此:

如果只想删除第一行中的
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的所有速度和其他优势


如果“universal”是指nx 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]])
或者

以下是如何:

import numpy as np

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

print(a)
输出:

[[1 2 3]
 [4 5 6]]
或者

这也适用于其他位置的元素。可以删除子数组中的任何元素,记住所有子数组都应该具有相同的长度

但是,可以操纵任何子数组的最后一个元素(或任何其他元素),除非形状保持不变

>>> a[0][-1] = 19
>>> a
array([[ 1,  2, 19],
       [ 4,  5,  6],
       [ 7,  8,  9]])
如果您试图形成一个具有不等长度行的矩阵,则会形成一个1D列表数组,在该数组上没有向量处理、切片等Numpy操作(列表操作有效)

类似地,
b+b
操作执行
b
b
的元素添加,但
c+c
执行两个列表之间的串联操作

供进一步参考

您希望矩阵的最终形状是什么?(现在是
(3,3)
a=a[:,0:2]
将删除每行的结尾。或者你可以做
np.delete(a,2,1)
我想要这个shapedawg,你能解释一下它是如何工作的吗?第一solution@grzyb您可以像dawg所说的那样删除每一行的结尾,或者例如,您可以将第一行的结尾置零,但是您必须以一定数量的行和列的数组结束。谢谢!顺便问一下,我如何使它具有普遍性?如何获得子阵列的元素数?在这种情况下定义“通用”?您的意思是给定一个2D数组
X X Y
dimensions来删除每行的最后一个元素吗?您的意思是给定一个2D数组X X Y dimensions来删除每行的最后一个元素吗?对
import numpy as np

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

print(a)
[[1 2 3]
 [4 5 6]]
>>> a = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> type(a)
<class 'numpy.ndarray'>
>>> a.shape
(3, 3)
>>> a[:,0:2]
array([[1, 2],
       [4, 5],
       [7, 8]])
>>> np.delete(a,2,1)
array([[1, 2],
       [4, 5],
       [7, 8]])
>>> a[0][-1] = 19
>>> a
array([[ 1,  2, 19],
       [ 4,  5,  6],
       [ 7,  8,  9]])
>>> b = np.array([[1,2,3],[1,2,3]])
>>> c = np.array([[1,2],[1,2,3]])

>>> b
array([[1, 2, 3],
       [1, 2, 3]])
>>> b.shape
(2, 3)

>>> c
array([list([1, 2]), list([1, 2, 3])], dtype=object)
>>> c.shape
(2,)

>>> print(type(b),type(c))
<class 'numpy.ndarray'> <class 'numpy.ndarray'>
>>> b+b
array([[2, 4, 6],
       [2, 4, 6]])
>>> c+c
array([list([1, 2, 1, 2]), list([1, 2, 3, 1, 2, 3])], dtype=object)