索引1超出大小为1的轴0的边界

2024-09-28 03:17:49 发布

您现在位置:Python中文网/ 问答频道 /正文

N=100
numbers_training_pattern=10
for pattern in range(number_training_pattern):
rate=np.zeros((1,N))


   for epoch in range(1,nepochs+1):


        if epoch<=1:
           clamp=1
        else:
           clamp=0

       activ=np.zeros((1,N))
       for neuron in range(N):


          PreSynInput = rate.T + (Testing_pattern[neuron, pattern] * clamp)


          activ[neuron] = np.dot(PreSynInput.T,autocorrelation_matrix[:,neuron])

错误 索引器错误跟踪(最近一次调用最后一次) 在() 17岁 18岁 --->;19活动[神经元]=np.点(预同步输入T,自相关矩阵[:,神经元]) 20个 21岁

索引器错误:索引1超出大小为1的轴0的边界


Tags: inforrate错误nptrainingzerosrange
1条回答
网友
1楼 · 发布于 2024-09-28 03:17:49
activ=np.zeros((1,N))

意味着activ有1行和N列。activ[0]指第一行。activ[1]将引发索引器错误,因为没有第二行。

for i in range(N)使i的范围从0到N-1。因此,如果N大于1,则会发生错误。

在更改当前代码的最少数量时修复错误的一种方法是使用

activ[0, neuron] = np.dot(PreSynInput.T,autocorrelation_matrix[:,neuron])

然而,逐元素为NumPy数组赋值通常不是利用NumPy的理想方法。如果您可以将计算表示为在更大的数组上完成的计算,并且不使用Python for循环,那么您将获得更好的性能。

例如,如果我正确理解未定义数组的形状,则 可以替换

activ=np.zeros((1,N))
for neuron in range(N):
    PreSynInput = rate.T + (Testing_pattern[neuron, pattern] * clamp)
    activ[neuron] = np.dot(PreSynInput.T,autocorrelation_matrix[:,neuron])

PreSynInput = (rate.T + (Testing_pattern[:, pattern] * clamp))
activ = np.einsum('ij,ij->j', PreSynInput, autocorrelation_matrix)

例如

import numpy as np
np.random.seed(2015)
N, M, pattern = 10, 5, 0
clamp = 1
autocorrelation_matrix = np.random.randint(10, size=(N, N))
Testing_pattern = np.random.randint(10, size=(N, M))
rate = np.random.randint(10, size=(1,N))

activ=np.zeros((1,N))
for neuron in range(N):
    PreSynInput = rate.T + (Testing_pattern[neuron, pattern] * clamp)
    activ[:, neuron] = np.dot(PreSynInput.T, autocorrelation_matrix[:,neuron])

PreSynInput = (rate.T + (Testing_pattern[:, pattern] * clamp))
activ2 = np.einsum('ij,ij->j', PreSynInput, autocorrelation_matrix)

print(activ)
# [[ 405.  421.  272.  475.  227.  424.  644.  212.  325.  502.]]

print(activ2)
# [405 421 272 475 227 424 644 212 325 502]

如果你能找到一种方法来消除 for pattern-循环和for epoch-循环。

如何消除这些循环是一个非常困难和有趣的问题 为一个单独的问题辩护。如果你真的发布了一个关于它的新问题,请包含一个minimal example with runnable code所以 完全清楚给定输入的期望输出是什么。

相关问题 更多 >

    热门问题