gpt4 book ai didi

python - 如何创建一个 numpy N 维零数组,只有一个元素等于 1?

转载 作者:行者123 更新时间:2023-12-04 00:17:37 25 4
gpt4 key购买 nike

是否有一种简短的单行方法来创建 numpy 数组(可能有多个维度),该数组在特定位置有一个,而在所有其他位置为零?对于一维数组,可以执行以下操作来创建一个在第 k^{th} 个位置上有 1 的数组:

np.eye(1, N, k = k)

如何将其推广到更高维的情况?

最佳答案

例如,如果您需要一个索引为 (2, 3) 的 1 的 3x5 矩阵,只需创建一个一维数组,然后对其进行整形:

M, N = 3, 5
i, j = 2, 3
np.eye(1, M * N, k=(i+1) * M + j).reshape(M, N)

array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 1., 0., 0.]])

了解 每个 多维 numpy 数组在内部表示为一维数组可能会有所帮助,并带有一些包装逻辑来处理步幅和索引。这意味着这里的解决方案也可以通过适当的算术推广到任何维度。这是一个概括:

def make_nd_array_with(dims, index):
return (np.eye(1,
np.prod(dims),
k=(((np.array(index[:-1]) + 1) * dims[:-1]).sum() + index[-1]))
.reshape(*dims))

make_nd_array_with((M,N), (i,j))

array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 1., 0., 0.]])

请注意,这解决了您希望在一行中执行此操作的限制,但通常规范的解决方案是创建一个零数组并设置一个值,如注释和 other answer提及。

arr = np.zeros(M, N)
arr[i, j] = 1

关于python - 如何创建一个 numpy N 维零数组,只有一个元素等于 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62704924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com