【问题标题】:PyCharm numpy - sorting an array doesn't work?PyCharm numpy - 对数组进行排序不起作用?
【发布时间】:2021-12-29 02:55:43
【问题描述】:

我试图运行一些代码并对数组进行排序,下面是代码。 在线它说可以使用这种方式对数组进行排序,但是当我运行此代码时,输​​出为 None 而不是排序后的代码,有人可以解释为什么吗? 在 Jupyter Notebook 中,当我测试它时它工作正常。 两种方法都行不通 - 为什么会这样?

import numpy as np
arr = np.array([3, 7, 6, 8, 9, 1, 2, 3])
arr_sorted = arr.sort()
print(arr_sorted)

# alternative way 
arr_sorted2 = np.ndarray.sort(arr)
    print(arr_sorted2)

此外,我发现这可以代替 - 但我仍然不知道为什么。

print(np.sort(arr))
ab = np.sort(arr)
print(ab)

【问题讨论】:

    标签: python arrays numpy sorting


    【解决方案1】:

    原因是当您在数组本身上调用sort() 时,它会对数组进行就地排序并返回None,因此arr_sorted 在您的代码的第一部分也是None。最好这样调用方法:

    arr.sort()
    

    np.ndarray.sort(arr) 也是如此,因此arr_sorted2 也是None

    但是,调用np.sort(arr)将排序后的数组作为另一个对象返回,应该这样调用:

    arr = np.sort(arr)
    

    Jupyter 的行为是相同的,您可能需要重新启动笔记本并再次尝试从代码中获取有效输出,因为笔记本可能保存了变量的最后状态。

    【讨论】:

      【解决方案2】:

      如果你将sort作为ndarray类的方法,它会将数组就地排序并返回None,但是如果你使用sort像numpy的函数一样调用np.sort,那么在在这种情况下,它返回数组的排序副本,并且原始副本相同。所以这不是 Pycharm 中 numpy 的故障

      【讨论】:

      • 为什么它在 jupyter 中仍然有效?
      • 它还在 Jupyter 中输出 None
      • 请检查我在顶部添加的图片@Berger - 啊现在我明白了!谢谢大家
      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      相关资源
      最近更新 更多