【问题标题】:Python - Why is the created array empty? [duplicate]Python - 为什么创建的数组是空的? [复制]
【发布时间】:2020-07-11 23:14:35
【问题描述】:

这是我拥有的 MWE(最小工作示例):

import numpy as np

errors = np.array([])
for i in range(7):
    np.append(errors, i)
print(errors)

很遗憾,Jupyter Notebook 的输出只是一个空数组,但是为什么呢?

【问题讨论】:

  • 不要在循环中使用numpy.append - 即使你修复了你的错误,在循环中使用numpy.append 是非常低效的,因为不必要的复制是二次方的。
  • NameError: name 'np' is not defined。这不是 MWE。什么是 np ?麻木的?
  • 同上“什么是 np?” - 这个例子能运行吗?是否缺少包含?

标签: python numpy-ndarray


【解决方案1】:

直接回答你的问题,“为什么创建的数组是空的”,很简单:你创建了一个空数组。

errors = np.array([]) # this array is empty!

来自文档: https://docs.scipy.org/doc/numpy/reference/generated/numpy.append.html

numpy.append(arr, values, axis=None)

返回: append : ndarray arr 的副本,其值附加到轴。 请注意,追加不会就地发生:分配了一个新数组并 填满。

您的数组 errors 仅分配一次,您需要将附加的数组重新分配给 errors 以获得您期望的结果,否则它将保持为空。

errors = np.append(errors, i)

【讨论】:

    【解决方案2】:

    因为 numpy.append() 不能就地工作,即旧对象没有被覆盖。试试这个:

    import numpy as np
    
    errors = np.array([])
    for i in range(7):
        errors = np.append(errors, i)
    print(errors)
    

    我建议在你的情况下使用一个简单的列表:

    errors = []
    for i in range(7):
        errors +=[i]
    print(errors)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      相关资源
      最近更新 更多