python - 如何删除子数组的结束元素?
问题描述
所以我创建了一个 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]])
或者:
>>> 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]])