为了账号安全,请及时绑定邮箱和手机立即绑定

制作一个 3D 数组,其中每个项目引用 Python 中的当前行、列和项目

制作一个 3D 数组,其中每个项目引用 Python 中的当前行、列和项目

哆啦的时光机 2023-03-16 11:12:00
我正在尝试制作一个 3D 数组,其中每个元素都引用当前行、列和项目。所以如果我有x=[0,1],y=[0,1,2]和item=['a','b'], 我希望输出是arr = [ [ [00a, 10a], [01a, 11a], [02a, 12a] ], [ [00b, 10b], [01b, 11b], [02b, 12b] ]]我知道这可以通过三重循环轻松完成for i in range(len(x)):  for j in range(len(y)):    for it in range(len(item)):      arr[i,j,it] = str(i)+str(j)+it但是有没有更优雅的方法来做到这一点,例如使用一些 numpy 命令?谢谢!
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

您可以使用列表理解:


arr=[[[f'{i}{j}{k}' for k in item]for j in y]for i in x]

输出:


arr

[[['00a', '00b'], ['01a', '01b'], ['02a', '02b']],

 [['10a', '10b'], ['11a', '11b'], ['12a', '12b']]]

itertools使用and的另一种选择numpy:


import itertools 

import numpy as np

prod=itertools.product(x,y,item)

prod=list(map(lambda x: f'{x[0]}{x[1]}{x[2]}',prod))

np.array(prod).reshape(len(x),len(y),len(item))

输出:


array([[['00a', '00b'],

        ['01a', '01b'],

        ['02a', '02b']],


       [['10a', '10b'],

        ['11a', '11b'],

        ['12a', '12b']]], dtype='<U3')


查看完整回答
反对 回复 2023-03-16
?
隔江千里

TA贡献1906条经验 获得超10个赞

这是另一个没有使用 numpy 循环的解决方案:


import numpy as np


x=np.array([0,1]).astype(str)

y=np.array([0,1,2]).astype(str)

items=np.array(['a','b'])



temp= np.core.defchararray.add(y[:,np.newaxis], items)

result = np.core.defchararray.add(x[:,np.newaxis,np.newaxis], temp)


print(result)

输出:


[[['00a' '00b']

  ['01a' '01b']

  ['02a' '02b']]


 [['10a' '10b']

  ['11a' '11b']

  ['12a' '12b']]]


查看完整回答
反对 回复 2023-03-16
  • 2 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号