numpy选择不同长度的每一行

时间:2017-11-29 17:17:16

标签: python arrays numpy python-3.5

我有两个数组s

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呢?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

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)]

列表推导重复xy结合zip()以创建原始数组的新切片。

答案 1 :(得分:0)

这样的事情,

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