将尺寸为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.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.]])
【讨论】:
【参考方案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数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章