Python numpy选择具有不同长度的每一行

Python numpy选择具有不同长度的每一行,python,arrays,numpy,python-3.5,Python,Arrays,Numpy,Python 3.5,我有两个数组 x=array([[0, 0, 0, 0, 0], [1, 0, 0, 0, 0], [2, 2, 2, 2, 2]]) 我想根据数组y中的长度来选择每行中的元素 y = array([3, 2, 4]) 我的目标是z: z = array([[0, 0, 0], [1, 0,], [2, 2, 2, 2]]) 如何使用numpy函数而不是list/loop来实现这一点 非常感谢您的帮助。Numpy阵列针对具有特定尺寸的同构阵列进行了优化。我喜欢把

我有两个数组

x=array([[0, 0, 0, 0, 0],
    [1, 0, 0, 0, 0],
    [2, 2, 2, 2, 2]])
我想根据数组y中的长度来选择每行中的元素

y = array([3, 2, 4])
我的目标是z:

z = array([[0, 0, 0],
   [1, 0,],
   [2, 2, 2, 2]])
如何使用numpy函数而不是list/loop来实现这一点


非常感谢您的帮助。

Numpy阵列针对具有特定尺寸的同构阵列进行了优化。我喜欢把它看作一个矩阵:在每行上有不同数量的元素的矩阵是没有意义的

也就是说,根据您希望如何使用处理后的数组,您可以简单地创建一个数组列表:

z = [array([0, 0, 0]),
array([1, 0,]),
array([2, 2, 2, 2]])]
不过,您仍需要手动执行此操作:

x = array([[0, 0, 0, 0, 0], [1, 0, 0, 0, 0], [2, 2, 2, 2, 2]])
y = array([3, 2, 4])

z = [x_item[:y_item] for x_item, y_item in zip(x, y)]

列表理解将迭代
x
y
zip()
组合,以创建原始数组的新片段。

类似的内容

z = [x[i,:e] for i,e in enumerate(y)]

只是好奇-你打算如何使用这样一个不规则的数组?因为结果无论如何都会是一个列表,列表理解是完成这项工作最直接的方法。或者你可以使用
np.split
并每隔一位丢弃一次。