亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

制作一個 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 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號