【问题标题】:numpy select each row with different lengthsnumpy 选择不同长度的每一行
【发布时间】:2018-05-13 11:37:12
【问题描述】:

我有两个数组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 函数而不是列表/循环来做到这一点?

非常感谢您的帮助。

【问题讨论】:

  • 只是好奇——你打算如何使用这样一个参差不齐的数组?
  • 因为无论如何结果都会是一个列表,所以列表推导式是最直接的工作方式。
  • 或者您可以使用np.split 并丢弃所有其他位。

标签: python arrays numpy python-3.5


【解决方案1】:

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() 创建原始数组的新切片。

【讨论】:

    【解决方案2】:

    类似的东西,

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

    【讨论】:

      猜你喜欢
      • 2019-09-11
      • 1970-01-01
      • 2022-08-18
      • 2018-03-07
      • 1970-01-01
      • 2019-12-04
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多