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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

用位于 Mx2 numpy 數(shù)組中的元素替換 Nx3x2 numpy 數(shù)組中的元素

用位于 Mx2 numpy 數(shù)組中的元素替換 Nx3x2 numpy 數(shù)組中的元素

MMMHUHU 2022-12-20 14:18:35
我有以下xynumpy 數(shù)組,它表示一些三角形頂點(diǎn)的位置:array([[[ 0.30539728, 49.82845203],        [ 0.67235022, 49.95042185],        [ 0.268982  , 49.95195348]],       [[ 0.268982  , 49.95195348],        [ 0.67235022, 49.95042185],        [ 0.27000135, 50.16334035]],       ...       [[ 1.00647459, 50.25958169],        [ 0.79479121, 50.3010079 ],        [ 0.67235022, 49.95042185]],       [[ 0.79479121, 50.3010079 ],        [ 0.6886783 , 50.25867683],        [ 0.67235022, 49.95042185]]])在這里,它是一個(gè)形狀數(shù)組,(10, 3, 2)但它也可以是(5, 3, 2)or (18, 3, 2),你可以給它命名。無(wú)論如何它的形狀(N, 3, 2)。我有另一個(gè) numpyto_replace形狀數(shù)組,(4, 2)但它也可以是(6, 2)or (7, 2),但總是形狀(M, 2):array([[ 1.08267406, 49.88690993],       [ 1.1028248 , 50.01440407],       [ 0.74114309, 49.73183549],       [ 1.08267406, 49.88690993]])它表示可以在我的第一個(gè)數(shù)組中找到的坐標(biāo)對(duì)的位置。請(qǐng)注意,這些對(duì)中的每一對(duì)至少出現(xiàn)一次,xy但也可能出現(xiàn)不止一次。最后,我有第三個(gè)數(shù)組replace_by,其形狀(8,)(或(M*2)基于上述指示的形狀)和哪些值旨在準(zhǔn)確替換to_replace我的第一個(gè)xy數(shù)組中包含的那些值。它看起來(lái)像這樣:array([ 0.87751214, 49.91866589,  0.88758751, 49.98241296,  0.70674665, 49.84112867,  0.87751214, 49.91866589])所以基本上所有的對(duì)[1.08267406, 49.88690993]都xy應(yīng)該被替換[0.87751214, 49.91866589]為例如。我當(dāng)前的代碼看起來(lái)像這樣,但它僅在to_replace和replace_by嚴(yán)格為 shape時(shí)才有效(2, 2)。indices = (xy == to_replace[:, None][:, None])[0]xy[indices] = replace_by我已經(jīng) 看了很多答案,實(shí)際上從其中一些中得到了啟發(fā),但我仍然無(wú)法讓它發(fā)揮作用。
查看完整描述

2 回答

?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊

您可以使用numpy.isclose比較行,然后使用.all(axis=2)查找所有最后一行相同的位置。Numpy 將廣播每一行以適應(yīng)xy形狀。


import numpy as np

xy = np.array([[[ 0.30539728, 49.82845203],

        [ 0.67235022, 49.95042185],

        [ 0.268982  , 49.95195348]],

       [[ 0.268982  , 49.95195348],

        [ 0.67235022, 49.95042185],

        [ 0.27000135, 50.16334035]],

       [[ 1.00647459, 50.25958169],

        [ 0.79479121, 50.3010079 ],

        [ 0.67235022, 49.95042185]],

       [[ 0.79479121, 50.3010079 ],

        [ 0.6886783 , 50.25867683],

        [ 0.67235022, 49.95042185]]])

xy_start = xy.copy()



to_replace = np.array([[ 1.08267406, 49.88690993],

       [ 1.1028248 , 50.01440407],

       # [ 0.74114309, 49.73183549],

       [ 0.6886783 , 50.25867683],

       [ 1.08267406, 49.88690993]])


replace_by = np.array([ 0.87751214, 49.91866589,  0.88758751, 49.98241296,  0.70674665, 49.84112867,  0.87751214, 49.91866589])

replace_by_reshaped = replace_by.reshape(-1, 2)


for i, row in enumerate(to_replace):

    xy[np.isclose(xy, row).all(axis=2)] = replace_by_reshaped[i]

print(xy_start)

# [[[ 0.30539728 49.82845203]

#   [ 0.67235022 49.95042185]

#   [ 0.268982   49.95195348]]


#  [[ 0.268982   49.95195348]

#   [ 0.67235022 49.95042185]

#   [ 0.27000135 50.16334035]]


#  [[ 1.00647459 50.25958169]

#   [ 0.79479121 50.3010079 ]

#   [ 0.67235022 49.95042185]]


#  [[ 0.79479121 50.3010079 ]

#   [ 0.6886783  50.25867683]

#   [ 0.67235022 49.95042185]]]

print(xy)

# [[[ 0.30539728 49.82845203]

#   [ 0.67235022 49.95042185]

#   [ 0.268982   49.95195348]]


#  [[ 0.268982   49.95195348]

#   [ 0.67235022 49.95042185]

#   [ 0.27000135 50.16334035]]


#  [[ 1.00647459 50.25958169]

#   [ 0.79479121 50.3010079 ]

#   [ 0.67235022 49.95042185]]


#  [[ 0.79479121 50.3010079 ]

#   [ 0.70674665 49.84112867]

#   [ 0.67235022 49.95042185]]]

編輯


.all(axis=2)True如果沿 axis=2 的所有值都是Trueand Falseelse ,則將axis=2 收縮。我認(rèn)為 little 2d 示例清楚地說(shuō)明了這里發(fā)生的事情。


>>> import numpy as np

>>> a = np.array([[0, 1], [0, 2], [3, 4]])

>>> a

array([[0, 1],

       [0, 2],

       [3, 4]])

>>> np.isclose(a, [0, 1])

array([[ True,  True],

       [ True, False],

       [False, False]])

>>> np.isclose(a, [0, 1]).all(axis=1)

array([ True, False, False])

>>> a[np.isclose(a, [0, 1]).all(axis=1)]

array([[0, 1]])

>>> a[np.isclose(a, [0, 1]).all(axis=1)] = [12, 14]

>>> a

array([[12, 14],

       [ 0,  2],

       [ 3,  4]])


查看完整回答
反對(duì) 回復(fù) 2022-12-20
?
精慕HU

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊

numpy-indexed包(免責(zé)聲明:我是它的作者)包含以矢量化和優(yōu)雅的方式解決這個(gè)問(wèn)題的功能。

鑒于您定義的數(shù)組,這個(gè)單行代碼應(yīng)該可以解決問(wèn)題:

import numpy_indexed as npi    
npi.remap(xy.reshape(-1, 2), to_replace, replace_by.reshape(-1, 2)).reshape(-1, 3, 2)


查看完整回答
反對(duì) 回復(fù) 2022-12-20
  • 2 回答
  • 0 關(guān)注
  • 127 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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