第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Python find coordinates in 3d array of a value

Python find coordinates in 3d array of a value

人到中年有點(diǎn)甜 2023-03-08 10:57:48
我有一個 3d 數(shù)組,我想找到值為 1 的每個元素的坐標(biāo)。我使用 numpy,這是我的數(shù)組:table = np.array([    [        [1,4,8,6],        [8]],    [        [4],        [9],        [5]],    [        [6],        [4]],    [        [2],        [1]]])基于這個相關(guān)問題,我有以下代碼:print(np.argwhere(table == 1))對于“更簡單”的 3d 數(shù)組,此代碼完全符合我的要求(打印值出現(xiàn)的 3d 坐標(biāo))。但不適用于我的陣列。為什么我當(dāng)前的代碼不適用于我的數(shù)組?如何在我的陣列上獲得相同的結(jié)果?它正在處理的數(shù)組:table = np.array([    [        [ 1, 2, 3],        [ 8, 4, 11]],    [           [ 1, 4, 4],        [ 8, 5, 9]],    [        [ 3, 8, 6],        [ 11, 9, 8]],    [           [ 3, 7, 6],        [ 9, 3, 7]]])
查看完整描述

1 回答

?
ibeautiful

TA貢獻(xiàn)1993條經(jīng)驗 獲得超6個贊

當(dāng)您打印(第一個)表時,結(jié)果是:


array([list([[1, 4, 8, 6], [8]]), list([[4], [9], [5]]), list([[6], [4]]),

       list([[2], [1]])], dtype=object)

即它是一個一維數(shù)組,包含4個列表類型的元素。


np.where找不到1實(shí)例的原因是它查看每個元素并將其與給定值進(jìn)行比較。此函數(shù)在檢查數(shù)組的特定元素時不會“潛入”此對象(不檢查元素的各個子元素(如果它是列表))。


np.where在檢查一個元素(列表類型)時所做的所有事情是檢查:這個元素是否 == 1。既然不是,那么它就被視為不匹配。其他元素也是。


根據(jù) 15.07 的評論進(jìn)行編輯

如果您將表定義為:


table2 = np.array(list([

    list([[1,4,8,6], [8,0,0,0], [0,0,0,0]]),

    list([[4,0,0,0], [9,0,0,0], [5,0,0,0]]),

    list([[6,0,0,0], [4,0,0,0], [0,0,0,0]]),

    list([[2,0,0,0], [1,0,0,0], [0,0,0,0]])]))

(所有列表的大小相同),Pandas足夠聰明,可以將其轉(zhuǎn)換為:


array([[[1, 4, 8, 6],

        [8, 0, 0, 0],

        [0, 0, 0, 0]],


       [[4, 0, 0, 0],

        [9, 0, 0, 0],

        [5, 0, 0, 0]],


       [[6, 0, 0, 0],

        [4, 0, 0, 0],

        [0, 0, 0, 0]],


       [[2, 0, 0, 0],

        [1, 0, 0, 0],

        [0, 0, 0, 0]]])

運(yùn)行table.shape,你會看到(4, 3, 4)。


然后運(yùn)行table.dtype,你會看到dtype('int32'),所以它現(xiàn)在是一個“常規(guī)”的Numpy int數(shù)組。


在這種情況下,np.argwhere(table == 1)找到僅包含1的單元格的索引。


但是你的桌子是如此“奇怪”的情況,熊貓不是為它設(shè)計的。


要在這些(嵌套的)列表中找到每個1的索引,您可以遍歷數(shù)組(使用nd.iter)并在每個元素內(nèi)部查找1的索引(如果有)。就像是:


it = np.nditer(table, flags=['f_index', 'refs_ok'])

for x in it:

    print(f'Index {it.index}: {x}')

    res = [(i, el.index(1)) for i, el in enumerate(x[()]) if 1 in el]

    if len(res) == 0:

        print('    Nothing found')

    else:

        print(f'    Found at: {res}')

請注意,在x之后有一些奇怪的結(jié)構(gòu),即[()]。原因是:


您的表是對象的一維數(shù)組。

每個元素實(shí)際上是一個0 維數(shù)組,包含單個 對象(嵌套列表)。

[()]是獲取唯一包含對象的方法。您通過 index訪問元素,但索引值是一個空元組 (沒有實(shí)際的索引值)。

對于您的表格,上面的代碼打印:


Index 0: [[1, 4, 8, 6], [8]]

    Found at: [(0, 0)]

Index 1: [[4], [9], [5]]

    Nothing found

Index 2: [[6], [4]]

    Nothing found

Index 3: [[2], [1]]

    Found at: [(1, 0)]

如果需要,請對其進(jìn)行返工以滿足您的需要。


查看完整回答
反對 回復(fù) 2023-03-08
  • 1 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號