【问题标题】:index 1 is out of bounds for axis 0 with size 1对于大小为 1 的轴 0,索引 1 超出范围
【发布时间】:2015-10-13 00:29:49
【问题描述】:
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 activ[neuron] = np.dot(PreSynInput.T,autocorrelation_matrix[:,neuron]) 20 21

IndexError:索引 1 超出轴 0 的范围,大小为 1

【问题讨论】:

  • 您应该细化您的问题以遵循一些stackoverflow 的指导方针。你没有明确的问题,没有任何解释。请详细说明。

标签: python indexoutofboundsexception


【解决方案1】:
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-loop 和for epoch-loop。

如何消除这些循环是一个非常困难和有趣的问题 证明一个单独的问题。如果您确实发布了有关它的新问题,请包括 minimal example with runnable code 以便它 绝对清楚给定输入所需的输出是什么。

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2015-08-06
    相关资源
    最近更新 更多