Skip to main content
 首页 » 编程设计

python之构造除numpy中的一个元素外所有元素为零的矩阵的有效方法

2025年05月04日19lexus

我想通过比较输出信号及其真实输出值来为每个输入计算神经网络的输出误差,因此我需要两个矩阵来计算此任务。

我有 (n*1) 形状的输出矩阵,但在标签中我只有应该激活的神经元索引,所以我需要一个形状相同的矩阵,所有元素都等于零,除了那个它的索引等于标签。我可以用函数做到这一点,但我想知道 numpy python 中是否有一个内置方法可以为我做到这一点?

请您参考如下方法:

您可以使用 numpy 或标准库以多种方式做到这一点,一种方式是创建一个零数组,并将与索引对应的值设置为 1。

n = len(result) 
 
a = np.zeros((n,));  
a[id] = 1 

它也可能是最快的:

>> %timeit a = np.zeros((n,)); a[id] = 1 
1000000 loops, best of 3: 634 ns per loop 

或者您可以使用 numpy.pad用零填充 [ 1 ] 数组。但由于填充逻辑,这几乎肯定会变慢。

np.lib.pad([1],(id,n-id),'constant', constant_values=(0)) 

正如预期的那样慢了一个数量级:

>> %timeit np.lib.pad([1],(id,n-id),'constant', constant_values=(0)) 
10000 loops, best of 3: 47.4 µs per loop 

您可以按照评论的建议尝试列表理解:

results = [7] 
 
np.matrix([1 if x == id else 0 for x in results]) 

但它也比第一种方法慢得多:

>> %timeit np.matrix([1 if x == id else 0 for x in results]) 
100000 loops, best of 3: 7.25 µs per loop 

编辑: 但在我看来,如果你想计算神经网络错误。你应该只使用 np.argmax并计算它是否成功。该错误计算可能会给您带来比其有用更多的噪音。如果您觉得您的网络容易出现相似之处,您可以制作一个混淆矩阵。