首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于提供模式生成三维numpy阵列

基于提供模式生成三维numpy阵列
EN

Stack Overflow用户
提问于 2022-04-04 15:22:39
回答 2查看 86关注 0票数 1

你能告诉我是否有什么“聪明”的方法来根据提供的模式生成三维数字数组吗?让我解释一下我的意思。例如,如果模式为[1, 4, 6, 4, 1],则对应的2D数组为:

代码语言:javascript
复制
[
    [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库都可以使用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-04 15:39:09

您可以使用numpy.pad在中心依次添加“层”(就像洋葱(实际上是非常立方的洋葱) ):

代码语言:javascript
复制
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 -循环肯定是过分的,但如果有人有想法的话,我会公开征求建议的。

票数 1
EN

Stack Overflow用户

发布于 2022-04-04 16:08:20

棘手的部分是生成与模式匹配的指数。以下内容应适用于回文:

代码语言:javascript
复制
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]

产出:

代码语言:javascript
复制
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]])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71739757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档