【问题标题】:NumPy Won't Append ArraysNumPy 不会追加数组
【发布时间】:2016-04-08 11:05:50
【问题描述】:

我目前正在研究一个神经网络来玩石头剪刀布,但我遇到了一个大问题。

我让神经网络根据三个动作的历史预测接下来会发生什么,其中人类的每一个动作,在一个数组中创建一个新列表,其中包含前两个动作和新的。然后神经网络训练并从中学习。我的代码可以在下面找到。

#add new situation, with what is currently happening to make current prediction with adjusted weights

current_turn = np.array([[input_data[len(input_data) - 1][1], input_data[len(input_data) - 1][2], output_data[len(output_data) - 1][0]]])
np.append(input_data, current_turn, axis = 0)

我正在使用 Python 系统 NumPy,它拒绝附加这两个数组,这样神经网络就不会学习。

编辑:其中一个响应认识到必须将数组重新分配给这个新添加的数组。当我稍后尝试时,如下所示,它再次不起作用。

if human_choice == "r":
        output_data = np.append(output_data, ([0]))
elif human_choice == "p":
        output_data = np.append(output_data, ([0.5]))
elif human_choice == "s":
        output_data = np.append(output_data, ([1]))

有没有更好的方法来加入这些数组以便算法可以学习?

注意:“追加”没有出现任何错误,但似乎没有完成它的工作。

【问题讨论】:

  • 如果您知道问题与附加数组有关,您能否将您的问题归结为一个与此相关的示例? CBA 涉足大量高度特定于神经网络/石头剪刀布上下文的代码
  • @jez 绝对。我已经做出改变了。
  • 您正在尝试使用append,就好像它是一个列表方法一样。但是np.append 不是一种方法,也不能“就地”工作。这只是调用np.concatenate 的另一种方式。

标签: python arrays numpy


【解决方案1】:

正如docs 所说,

值被附加到这个数组的一个副本中。

(强调我的)。

所以np.append 会创建一个新列表,而不是修改您原来的列表。你必须写:

input_data = np.append(input_data, current_turn, axis = 0)

例子:

import numpy as np
my_array = np.array([1, 2, 3])
print(my_array) 
# [1 2 3]
my_array = np.append(my_array, [4])
print(my_array)
# [1 2 3 4]

如果对np.append 的行为方式感兴趣,请参阅this question

【讨论】:

  • 感谢您的回答。当我这样做时,它在程序稍后的另一个追加上不起作用。我会立即将此添加到问题中。
  • 我已经进行了编辑。非常感谢您的意见。
  • @tdh,您能否解释一下,“它再次不起作用”是什么意思?正在发生什么以及应该发生什么?
  • @tdh,这似乎很奇怪。我在答案中添加了一个绝对适合我的示例。您能否以类似的方式重现您的问题(例如创建 MCVE,请参阅stackoverflow.com/help/mcve)?或提供更多调试信息。
【解决方案2】:

您可以改用 numpy.concatenate 方法。

import numpy as np
arr = np.array([1, 2])

arr = np.concatenate((arr,[4]))
print(arr)
# [1 2 3 4]

更多帮助请参见文档:http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.concatenate.html

【讨论】:

  • 我有点希望他们从未创建过append 函数。这是其滥用的典型例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 2018-01-14
  • 2015-02-21
  • 2014-11-03
  • 2021-04-15
  • 1970-01-01
相关资源
最近更新 更多