将nump1维度的numpy数组转换为nx10维度的numpy数组

时间:2015-09-15 19:23:43

标签: python arrays numpy

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

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

例如:

A[i]

用numpy有一种优雅的方式吗?

3 个答案:

答案 0 :(得分:3)

使用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.]])

答案 1 :(得分:0)

这样的事情可以做到:

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的元素可能有多个项目的情况。

答案 2 :(得分:0)

你可以这样做,假设一个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

那么应该分配正确的值吗?

在我的测试用例中工作正常。