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

我正在尝试制作一个 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 命令?谢谢!


哆啦的时光机
浏览 164回答 2
2回答

慕田峪7331174

您可以使用列表理解:arr=[[[f'{i}{j}{k}' for k in item]for j in y]for i in x]输出:arr[[['00a', '00b'], ['01a', '01b'], ['02a', '02b']],&nbsp;[['10a', '10b'], ['11a', '11b'], ['12a', '12b']]]itertools使用and的另一种选择numpy:import itertools&nbsp;import numpy as npprod=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'],&nbsp; &nbsp; &nbsp; &nbsp; ['01a', '01b'],&nbsp; &nbsp; &nbsp; &nbsp; ['02a', '02b']],&nbsp; &nbsp; &nbsp; &nbsp;[['10a', '10b'],&nbsp; &nbsp; &nbsp; &nbsp; ['11a', '11b'],&nbsp; &nbsp; &nbsp; &nbsp; ['12a', '12b']]], dtype='<U3')

隔江千里

这是另一个没有使用 numpy 循环的解决方案:import numpy as npx=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']&nbsp; ['01a' '01b']&nbsp; ['02a' '02b']]&nbsp;[['10a' '10b']&nbsp; ['11a' '11b']&nbsp; ['12a' '12b']]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python