Python 在更新值时扩展numpy数组
我有一个形状为Python 在更新值时扩展numpy数组,python,numpy,numpy-ndarray,Python,Numpy,Numpy Ndarray,我有一个形状为(1,m)的numpy数组,每个条目(n)是一个范围为0-9的整数 我想创建一个新的矩阵,它的形状(m,10),其中所有条目都是0,除了第n列是1 例如: [2, 3, 1] -> [[0, 0, 1, 0, ...], [0, 0, 0, 1, ...], [0, 1, 0, 0, ...]] 我为其编写的代码是: y_values = np.array([[2, 3, 6, 4, 7]]) y = np.zeros((10, y_values.shape[1])) f
(1,m)
的numpy数组,每个条目(n
)是一个范围为0-9的整数
我想创建一个新的矩阵,它的形状(m,10)
,其中所有条目都是0,除了第n列是1
例如:
[2, 3, 1] -> [[0, 0, 1, 0, ...], [0, 0, 0, 1, ...], [0, 1, 0, 0, ...]]
我为其编写的代码是:
y_values = np.array([[2, 3, 6, 4, 7]])
y = np.zeros((10, y_values.shape[1]))
for i in range(y_values.shape[1]):
y[y_values[0][i]][i] = 1
是否有一种方法可以摆脱
for
循环,并使其更有效?正如您所期望的,有一种方法,使用奇特的索引。您需要提供两个数组,在每个方向上给出相应的坐标。您已经拥有的列索引。与每列对应的行索引正好是np.arange(m)
:
另一个解决方案是(如果您确定所有0-9类都将存在)
@罗伊查。不要删除你的答案,它完全可以。我的意思是OP想用10而不是max+1。这能回答你的问题吗@永军。正确的感谢是投票并最终选择答案
result = np.zeros((m, 10), dtype=np.bool)
result[np.arange(m), y_values[0]] = True
df = pd.get_dummies([2, 3, 1, 4]).T