索引 1 超出了大小为 1 的轴 0 的范围
index 1 is out of bounds for axis 0 with size 1
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])
错误
IndexError Traceback(最后一次调用)
在 ()
17
18
---> 19 激活[神经元] = np.dot(PreSynInput.T,autocorrelation_matrix[:,神经元])
20
21
IndexError:索引 1 超出尺寸为 1 的轴 0 的范围
activ=np.zeros((1,N))
表示 activ
有 1 行和 N
列。 activ[0]
指的是第一行。 activ[1]
会引发 IndexError,因为没有第二行。
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
-循环。
如何消除这些循环是一个足够困难和有趣的问题
证明一个单独的问题。如果你 post 提出了一个新问题,请包含一个 minimal example with runnable code 这样它
绝对清楚给定输入的所需输出是什么。
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])
错误 IndexError Traceback(最后一次调用) 在 () 17 18 ---> 19 激活[神经元] = np.dot(PreSynInput.T,autocorrelation_matrix[:,神经元]) 20 21
IndexError:索引 1 超出尺寸为 1 的轴 0 的范围
activ=np.zeros((1,N))
表示 activ
有 1 行和 N
列。 activ[0]
指的是第一行。 activ[1]
会引发 IndexError,因为没有第二行。
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
-循环。
如何消除这些循环是一个足够困难和有趣的问题 证明一个单独的问题。如果你 post 提出了一个新问题,请包含一个 minimal example with runnable code 这样它 绝对清楚给定输入的所需输出是什么。