将每个像素值的Mnist数组数据转换为单热编码数组

问题描述 投票:1回答:1

[我正在尝试将归一化像素数据矩阵从mnist转换为一热阵列矩阵,该矩阵表示基于类&的每个像素的y_val,如果它大于0。

这是输入示例,更具体地说是数据集中单个示例中的单个行:

[[0.        ]
 [0.        ]
 [0.        ]
 [0.        ]
 [0.        ]
 [0.        ]
 [0.        ]
 [0.        ]
 [0.        ]
 [0.        ]
 [0.        ]
 [0.        ]
 [0.01176471]
 [0.07058824]
 [0.07058824]
 [0.07058824]
 [0.49411765]
 [0.53333336]
 [0.6862745 ]
 [0.10196079]
 [0.6509804 ]
 [1.        ]
 [0.96862745]
 [0.49803922]
 [0.        ]
 [0.        ]
 [0.        ]
 [0.        ]]

像素亮度值的28个元素的数组。现在,假设此输入的真实类为数字“ 2”。该脚本将检查并在当前每个像素值所在的位置插入一个单热点数组。

如果像素== 0,则将其转换为

[0.        ]

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]

因为我正在使用第11个条目来表示空白像素。

如果数组的元素值大于0,则将插入示例true标签的单热点数组,即“ 2”。

[0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

这是我到目前为止的代码

#copying the shape of the train data matrix of arrays into a new
#array
new_y_train = np.copy(x_train)

for ex_index, example in enumerate(x_train):
  for row_index, row in enumerate(example):
    for px_index, pixel in enumerate(row):
      temp_arr = np.zeros(11)
      if pixel > 0:
        pixel = np.insert(temp_arr, np.argmax(y_train[index]), 1)
        new_y_train[ex_index][row_index][px_index] = pixel
      else:
        pixel = np.insert(temp_arr, 11, 1)
        new_y_train[ex_index][row_index][px_index] = pixel

但是,当我到达此行时

new_y_train[ex_index][row_index][px_index] = pixel

关于将数组广播到像素值时出现错误,“无法将输入数组从形状(12)广播到形状(1)”

不知道如何调整大小或修改数组,以允许将此新的单发数组输入矩阵。

任何帮助都会很棒!

python numpy mnist
1个回答
0
投票

您可以使用花式索引来做

© www.soinside.com 2019 - 2024. All rights reserved.