我有一个大小为A
的numpy数组nx1
,其中每个值都是0到9之间的数字。
我想创建一个大小为B
的新数组nx10
,以便在B[i]
中我们存储一个包含零和位置{1}的numpy数组
例如:
A[i]
用numpy有一种优雅的方式吗?
答案 0 :(得分:3)
使用numpy.zeros
创建一个新的空数组,其大小将是(arr.size
,arr.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
那么应该分配正确的值吗?
在我的测试用例中工作正常。