我被要求使用以下一组列索引:
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 函数(例如,使用向量化)以不同的方式编写和/或改进吗?
有很多方法可以做到这一点。例如,由于
x
基本上是一个布尔掩码,因此您可以计算一个掩码并将其转换为您想要的任何类型:
x = (np.arange(5) < y[:, None]).astype(float)