【问题标题】:Reshaping and averaging matrices of training data重塑和平均训练数据矩阵
【发布时间】:2018-04-15 09:35:23
【问题描述】:

我正在尝试“标准化”我的训练集的形状 这样我就可以将它们输入香草神经网络。

输入总是有相同数量的“通道”/列代表一个特征 但对于给定的“y”,行数不同

是否有 python 或 numpy 或其他实用程序可以将矩阵作为输入 浮点数的尺寸 (m,n) 并将其拉伸到给定的 (m,o) 尺寸,其中 o > n 通过在整个新形状中插入行来平均值

示例: 我有一个形状为 (4,4) 的数组,但要求我的数组为 (7,4)

[
[1,1,1,1],
[2,2,2,2],
[1,1,1,1],
[4,4,4,4]
]

会变成

[
[1,1,1,1],
[1.5,1.5,1.5,1.5],
[2,2,2,2],
[1.5,1.5,1.5,1.5],
[1,1,1,1],
[2.5,2.5,2.5,2.5],
[4,4,4,4]
]

插入的行在之前的行之间进行平均 和之后的那个 有什么想法吗?

【问题讨论】:

  • 那不是4,7,而是7,4。你试过一维插值吗?
  • 你究竟为什么要规范化这个?是二维数据,还是需要更多的训练样本?
  • 正在记录的数据通道仅与其相邻行相关,作为简单平均,如图所示。要求是通过一次插入不超过一行并按照指示取平均值,最终得到一个包含任意行数的数组。在我们需要添加单行的情况下,我们将选择将该行插入到数组中间附近的某个位置。如果我们需要添加许多行,我们将通过迭代来完成此操作,一次添加不超过现有行数的 50%,直到达到所需的行数。这就是要求。

标签: python arrays numpy machine-learning


【解决方案1】:

您需要调用 insert_row(ar, position) 其中 ar 是您要在其中插入行的二维数组,而 position 是一个位置列表。它返回一个带有插入行的 numpy 数组。
试试下面的代码:

import numpy as np

ar = [
[1,1,1,1],
[2,2,2,2],
[1,1,1,1],
[4,4,4,4]
]


def insert_row(ar,positions):
    ar = np.array(ar)
    v = ar
    count = 0
    for i in positions:
            a = np.add(ar[i,:],ar[i+1,:])/2
            v = np.vstack([v[0:i+count+1,:],a,v[i+count+1:,:]])
            count+=1
    return v

输出:

    print(insert_row(ar, [1,2]))

     [[ 1.   1.   1.   1. ]
     [ 2.   2.   2.   2. ]
     [ 1.5  1.5  1.5  1.5]
     [ 1.   1.   1.   1. ]
     [ 2.5  2.5  2.5  2.5]
     [ 4.   4.   4.   4. ]]

print(insert_row(ar, [0]))

[[ 1.   1.   1.   1. ]
 [ 1.5  1.5  1.5  1.5]
 [ 2.   2.   2.   2. ]
 [ 1.   1.   1.   1. ]
 [ 4.   4.   4.   4. ]]

【讨论】:

  • 感谢@jimidime,我认为这种功能已经存在于许多 python 库之一中。请参阅上面关于我们希望在何处插入新行的评论,并根据我们需要插入多少行才能达到所需尺寸的平均值。因此,您发布的代码不能完全处理插入的任意数量的行。
猜你喜欢
  • 2015-01-24
  • 2020-01-05
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 2020-04-16
相关资源
最近更新 更多