【问题标题】:Sorting numpy matrix results in value error对 numpy 矩阵进行排序会导致值错误
【发布时间】:2021-08-14 19:38:24
【问题描述】:

我创建了一个名为 my_stocks 的 numpy 矩阵,其中包含两列:

  • 第 0 列由我定义的特定对象组成
  • 第 1 列由整数组成

我尝试按第 1 列对其进行排序,但这会导致 ValueError: np.sort(my_stocks)

完整方法:

def sort_stocks(self):
    my_stocks = np.empty(2)
    for data in self.datas:
        if data.buflen() > self.p.period:
            new_stock=[data,get_slope(self,data)]
            my_stocks = np.vstack([my_stocks,new_stock])
    self.stocks = np.sort(my_stocks)

如果我不是对矩阵进行排序,而是打印它,它不会导致问题。打印示例如下:

 [<backtrader.feeds.yahoo.YahooFinanceData object at 0x124ec2eb0>
  1.1081551020408162]
 [<backtrader.feeds.yahoo.YahooFinanceData object at 0x124ec2190>
  0.20202275819418677]
 [<backtrader.feeds.yahoo.YahooFinanceData object at 0x124eda610>
  0.08357118119975258]
 [<backtrader.feeds.yahoo.YahooFinanceData object at 0x124ecc400>
  0.5487027829313539]]

【问题讨论】:

  • 这看起来像是将列表循环错误地翻译成 numpy!您是否注意 empty 的作用以及它在结果中的显示方式。重复 vstack 比列表追加慢。您没有以任何方式指定对第 1 列的排序。 python list.sort 确实需要一个 key 参数。

标签: python numpy sorting matrix valueerror


【解决方案1】:

我发现该方法是按原始而不是按列对矩阵进行排序。

即使看起来很违反直觉,这仍然有效:

my_stocks[my_stocks[:, 1].argsort()]

【讨论】:

  • 没有axis np.sort 会使数组变平(你读过文档吗?)。您没有显示ValueError,但我怀疑这与订购那些“提要”对象有关。
猜你喜欢
  • 2012-04-22
  • 2021-06-29
  • 1970-01-01
  • 2012-08-17
  • 2016-09-27
  • 1970-01-01
  • 2017-03-25
  • 2019-09-09
  • 2021-03-08
相关资源
最近更新 更多