【问题标题】:Creating numpy array from list gives wrong shape从列表中创建 numpy 数组会给出错误的形状
【发布时间】:2017-03-31 07:56:07
【问题描述】:

我正在从一个 numpy 数组列表中创建几个 numpy 数组,如下所示:

seq_length = 1500
seq_diff = 200  # difference between start of two sequences
# x and y are 2D numpy arrays
x_seqs = [x[i:i+seq_length,:] for i in range(0, seq_diff*(len(x) // seq_diff), seq_diff)]
y_seqs = [y[i:i+seq_length,:] for i in range(0, seq_diff*(len(y) // seq_diff), seq_diff)]
boundary1 = int(0.7 * len(x_seqs))   # 70% is training set
boundary2 = int(0.85 * len(x_seqs))  # 15% validation, 15% test
x_train = np.array(x_seqs[:boundary1])
y_train = np.array(y_seqs[:boundary1])
x_valid = np.array(x_seqs[boundary1:boundary2])
y_valid = np.array(y_seqs[boundary1:boundary2])
x_test = np.array(x_seqs[boundary2:])
y_test = np.array(y_seqs[boundary2:])

我希望最终得到 6 个形状为 (n, 1500, 300) 的数组,其中 n 分别是训练、验证和测试数组数据的 70%、15% 或 15%。

这就是问题所在:_train_valid 数组结果很好,但 _test 数组是数组的一维数组。那就是:

  • x_train.shape(459, 1500, 300)
  • x_valid.shape(99, 1500, 300)
  • x_test.shape(99,)

但打印 x_test 会验证它是否包含正确的元素 - 即它是由 (1500, 300) 数组组成的 99 元素长数组。

为什么_test 矩阵的形状错误,而_train_valid 矩阵却没有?

【问题讨论】:

    标签: python numpy machine-learning


    【解决方案1】:

    x_seqs 中的项目长度不同。当它们的长度相同时,np.array 可以从中创建一个 3d 数组;当它们不同时,它会生成一个列表对象数组。查看x_testdtype。看[len(i) for i in x_test]

    我拿了你的代码,补充道:

    x=np.zeros((2000,10))
    y=x.copy()
    ...
    print([len(i) for i in x_seqs])
    print(x_train.shape)
    print(x_valid.shape)
    print(x_test.shape)
    

    得到:

    1520:~/mypy$ python3 stack40643639.py 
    [1500, 1500, 1500, 1400, 1200, 1000, 800, 600, 400, 200]
    (7,)
    (1, 600, 10)
    (2,)
    

    【讨论】:

      猜你喜欢
      • 2021-10-24
      • 2022-01-01
      • 1970-01-01
      • 2018-10-04
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      相关资源
      最近更新 更多