我有两个数组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呢?
非常感谢你的帮助。
答案 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)]
列表推导重复x
和y
结合zip()
以创建原始数组的新切片。
答案 1 :(得分:0)
这样的事情,
z = [x[i,:e] for i,e in enumerate(y)]