2D Numpy数组的前N个元素,其中N是列表

x759pob2  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(131)

假设我有一个M x N数组,

>>> M = 5
>>> N = 4
>>> a = np.ones((M, N))

array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

我想得到每个数组的前x个元素,但是x是一个大小为M的列表。

array([2, 3, 1, 4])

那么我的输出将是

[[1, 1], 
 [1, 1, 1], 
 [1], 
 [1, 1, 1, 1]]

我已经尝试过使用这种技术和其他类似的技术来实现这一点。这种方法不起作用,因为据我所知,索引输入不能是数组。

x = [2, 3, 1, 4]
a[:, :x]

我知道这可以通过使用for循环来实现,但我希望避免这样做,因为我正在处理大量的数据。
此外,输出很可能需要一个数组列表,而不是一个2D数组,因为Numpy似乎不赞成使用不同大小的数组。

3pvhb19x

3pvhb19x1#

你可以通过生成器写你想要的东西,但是在is循环的末尾:

import numpy as np
M = 5
N = 4
a = np.ones((M, N))
d = np.array([2, 3, 1, 4])

out = list(map(lambda a:a[0][:a[1]], zip(a, d)))

也许你可以稍微保存相比for循环(不确定甚至),但最好是看看什么是这样的东西的目的,如果你真的关心保持这样的列表或你只想要的值,以优化。

相关问题