我有一个长度L的(一维)numpy数组,数组中填充了从0到N-1的数字。
现在,我想构造一个NxL矩阵,使得在每列c中,a[c]的第1个条目是1,所有其他条目是0。你知道吗
例如,如果L=4,N=5和
a = np.array([1,2,0,4])
那么我们需要一个矩阵
m = np.array([[0,0,1,0],
[1,0,0,0],
[0,1,0,0],
[0,0,0,0],
[0,0,0,1]])
现在,我有以下代码:
def vectorize(a, L, N):
m = np.zeros((N, L))
for (i,x) in enumerate(a):
m[x][i] = 1.0
return m
这很好,但我确信有一个更快的方法使用一些numpy技巧(避免在一个页面上循环)。你知道吗
可以对第二个轴使用
np.arange(..)
:对于给定的样本输入,我们得到:
当使用整数数组作为索引时,需要广播到相同形状的其他数组来指示其他维度中的位置。在您的例子中,
a
的每个元素都是一个行索引。对应列为:现在可以直接索引到矩阵
m
:当索引numpy数组时,应该使用一个方括号运算符中的所有索引,而不是像}是
m[a][b]
这样的单独运算符。^当a
是整数数组时,{m
部分的副本,但当a
是单个整数时,是原始数据的视图,这是您的示例工作的唯一原因。你知道吗相关问题 更多 >
编程相关推荐