我可以将我的 Numpy 解决方案改进为练习吗?

问题描述 投票:0回答:1

我被要求使用以下一组列索引:

 y = np.array([3, 0, 4, 1])

将以下矩阵中的所有元素变为1:

x = np.zeros(shape = (4, 5)) 
以 y 作为起始列,行由 y 的位置给出。只是为了清楚。

最终结果必须如下:

[[0. 0. 0. 1. 1.]      
 [1. 1. 1. 1. 1.]  
 [0. 0. 0. 0. 1.]  
 [0. 1. 1. 1. 1.]]

例如:

y[0] = 3
,

那么第 0 行、第 3 列和第 4 列需要等于 1。

我是这样做的:

for (idx, num) in enumerate(y):         x[idx, num:] = 1

这个结果可以通过使用其他 Numpy 函数(例如,使用向量化)以不同的方式编写和/或改进吗?

python numpy vectorization
1个回答
0
投票

有很多方法可以做到这一点。例如,由于

x
基本上是一个布尔掩码,因此您可以计算一个掩码并将其转换为您想要的任何类型:

x = (np.arange(5) < y[:, None]).astype(float)
© www.soinside.com 2019 - 2024. All rights reserved.