你能告诉我是否有什么“聪明”的方法来根据提供的模式生成三维数字数组吗?让我解释一下我的意思。例如,如果模式为[1, 4, 6, 4, 1],则对应的2D数组为:
[
[1, 1, 1, 1, 1],
[1, 4, 4, 4, 1],
[1, 4, 6, 4, 1],
[1, 4, 4, 4, 1],
[1, 1, 1, 1, 1]
]三维阵列类似于2D。如果你把3D数组想象成一个立方体:在“立方体”中心只有一个6,在最近的邻里有26个4,而其他的1是。我为可能令人困惑的解释而道歉,我不是以英语为母语的人。如果有什么不清楚的地方请问一下。谢谢!
任何python库都可以使用。
发布于 2022-04-04 15:39:09
您可以使用numpy.pad在中心依次添加“层”(就像洋葱(实际上是非常立方的洋葱) ):
pattern = [1,4,6]
x = np.array(pattern[-1]).reshape([1,1,1])
for p in reversed(pattern[:-1]):
x = np.pad(x, mode='constant', constant_values=p, pad_width=1)
print(x)
#[[[1 1 1 1 1]
# [1 1 1 1 1]
# [1 1 1 1 1]
# [1 1 1 1 1]
# [1 1 1 1 1]]
#
# [[1 1 1 1 1]
# [1 4 4 4 1]
# [1 4 4 4 1]
# [1 4 4 4 1]
# [1 1 1 1 1]]
#
# [[1 1 1 1 1]
# [1 4 4 4 1]
# [1 4 6 4 1]
# [1 4 4 4 1]
# [1 1 1 1 1]]
#
# [[1 1 1 1 1]
# [1 4 4 4 1]
# [1 4 4 4 1]
# [1 4 4 4 1]
# [1 1 1 1 1]]
#
# [[1 1 1 1 1]
# [1 1 1 1 1]
# [1 1 1 1 1]
# [1 1 1 1 1]
# [1 1 1 1 1]]]上面的代码应该与任意数量的层一起工作(实际上,如果您调整了整形,那么它也适用于任意数量的维度)。然而,由于for-循环的原因,它与层数的比例很差.虽然在这个应用程序中矢量化这个for -循环肯定是过分的,但如果有人有想法的话,我会公开征求建议的。
发布于 2022-04-04 16:08:20
棘手的部分是生成与模式匹配的指数。以下内容应适用于回文:
a = np.array([1,4,6,4,1])
i = np.ceil((np.r_[:2, 2:-1:-1][:, None] * np.r_[:2, 2:-1:-1]) / 2).astype(int)
a[i]产出:
array([[1, 1, 1, 1, 1],
[1, 4, 4, 4, 1],
[1, 4, 6, 4, 1],
[1, 4, 4, 4, 1],
[1, 1, 1, 1, 1]])https://stackoverflow.com/questions/71739757
复制相似问题