将尺寸为nx1的numpy数组转换为尺寸为nx10的numpy数组[重复]

Posted

技术标签:

【中文标题】将尺寸为nx1的numpy数组转换为尺寸为nx10的numpy数组[重复]【英文标题】:transform a numpy array of dimensions nx1 into a numpy array of dimensions nx10 [duplicate] 【发布时间】:2015-12-12 04:18:20 【问题描述】:

我有一个 numpy 数组,A,大小为 nx1,其中每个值都是 0 到 9 之间的数字。

我想创建一个大小为nx10 的新数组B,以便在B[i] 中存储一个numpy 数组,该数组在A[i] 的位置包含零和1。

例如:

A array
[[9]
 [2]
 [4]
 [1]
 [8]]

B array
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
 [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
 [0, 0, 0, 0, 0, 0, 0, 0, 1, 0]]

有没有一种优雅的方式来使用 numpy 做到这一点?

【问题讨论】:

【参考方案1】:

你可以做这样的事情,假设 X 的 NP Nx1 数组:

max_val = max(X)
length_arr = len(X)
new_arr = np.zeros((max_val,length_arr))

这将创建您想要的正确大小的数组。

for i in range(len(X)):
    new_arr[i][X[i]-1]=1

然后应该在适当的位置分配正确的值吗?

在我的测试用例中运行良好。

【讨论】:

【参考方案2】:

使用numpy.zeros创建一个新的空数组,它的大小将是(arr.sizearr.max()),现在使用多维索引填充这些位置上的项目:

>>> arr = np.array([[9], [2], [4], [1], [8]])
>>> arr_ = np.zeros((arr.size, arr.max()))
>>> arr_[np.arange(arr.size), arr[:,0]-1] = 1
>>> arr_
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.],
       [ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.]])

【讨论】:

【参考方案3】:

这样的事情可以做到:

A = [[9],[2],[4],[1],[8]]
B = [[1 if i == j[0] else 0 for i in range(10)] for j in A]

这是一种基于列表的方法;您可以简单地在 B 上使用 np.asarray 来获取 numpy 矩阵,或者在 numpy 中创建一个 10x10 的零矩阵并在 A 数组指定的位置填充 1。

后者概括为 A 的元素可能包含多个项目的情况。

【讨论】:

以上是关于将尺寸为nx1的numpy数组转换为尺寸为nx10的numpy数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 matplotlib/numpy 将数组保存为灰度图像?

如何将M维数组转换为N维数组?

Numpy反向keras to_categorical

什么是Julia在所需尺寸上点缀产品的方法

使用Numpy而不在数组中获得额外的尺寸

为keras输入R转换图像/数组列表