gpt4 book ai didi

python - 从 numpy 中的 (n)D 数组中选择 (n-1)D 数组

转载 作者:太空狗 更新时间:2023-10-30 01:15:35 25 4
gpt4 key购买 nike

让我们以 3D 数组为例。或者更容易可视化的立方体。

我想选择那个立方体的所有面。我想将其推广到任意维度。

然后我还想向立方体 (cuboid) 添加/删除面,以及对任意维度的泛化。

我知道对于每个固定数量的维度你都可以做 array[:,:,0], array[-1,:,:] 我想知道如何概括到任意维度以及如何轻松迭代所有面孔。

最佳答案

得到一张脸:

def get_face(M, dim, front_side):
if front_side:
side = 0
else:
side = -1
index = tuple(side if i == dim else slice(None) for i in range(M.ndim))
return M[index]

添加面孔(未测试):

def add_face(M, new_face, dim, front_side):
#assume sizes match up correctly
if front_side:
return np.concatenate((new_face, M), dim)
else:
return np.concatenate((M, new_face), dim)

删除面孔:

def remove_face(M, dim, front_side):
if front_side:
dim_slice = slice(1, None)
else:
dim_slice = slice(None, -1)
index = tuple(dim_slice if i == dim else slice(None) for i in range(M.ndim))
return M[index]

遍历所有面孔:

def iter_faces(M):
for dim in range(M.ndim):
for front_side in (True, False):
yield get_face(M, dim, front_side)

一些快速测试:

In [18]: M = np.arange(27).reshape((3,3,3))
In [19]: for face in iter_faces(M): print face
[[0 1 2]
[3 4 5]
[6 7 8]]
[[18 19 20]
[21 22 23]
[24 25 26]]
[[ 0 1 2]
[ 9 10 11]
[18 19 20]]
[[ 6 7 8]
[15 16 17]
[24 25 26]]
[[ 0 3 6]
[ 9 12 15]
[18 21 24]]
[[ 2 5 8]
[11 14 17]
[20 23 26]]

关于python - 从 numpy 中的 (n)D 数组中选择 (n-1)D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20132743/

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