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

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

NumPy - 從另一個 2d 數(shù)組中選擇一個子矩陣

NumPy - 從另一個 2d 數(shù)組中選擇一個子矩陣

Helenr 2022-08-02 10:34:30
這是我的原始2d陣列A[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 2, 2, 2, 2, 2, 0, 0, 0], [0, 2, 2, 2, 2, 2, 2, 0, 0, 0], [0, 2, 2, 2, 2, 2, 2, 0, 0, 0], [0, 2, 2, 2, 2, 2, 2, 0, 0, 0], [0, 2, 2, 8, 8, 8, 2, 0, 0, 0], [0, 2, 2, 8, 8, 8, 2, 0, 0, 0], [0, 0, 0, 8, 8, 8, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]假設我想在中間返回一個 8 的 3x3 子矩陣。我用這個表達式做了一個布爾面具,它看起來像這樣。A == 8array([[False, False, False, False, False, False, False, False, False,        False],       [False, False, False, False, False, False, False, False, False,        False],       [False, False, False, False, False, False, False, False, False,        False],       [False, False, False, False, False, False, False, False, False,        False],       [False, False, False, False, False, False, False, False, False,        False],       [False, False, False,  True,  True,  True, False, False, False,        False],       [False, False, False,  True,  True,  True, False, False, False,        False],       [False, False, False,  True,  True,  True, False, False, False,        False],       [False, False, False, False, False, False, False, False, False,        False],       [False, False, False, False, False, False, False, False, False,        False]])這就是我陷入困境的地方。如何返回帶有該布爾掩碼的子矩陣?如果我這樣做,它會返回一個8s的平面數(shù)組,如下所示A[A == 8]array([8, 8, 8, 8, 8, 8, 8, 8, 8])另一種方法是獲取返回 的行號和列號。如何使用它們返回矩陣?np.where(A == 8)(array([5, 5, 5, 6, 6, 6, 7, 7, 7]), array([3, 4, 5, 3, 4, 5, 3, 4, 5]))對于這個問題,有沒有更好的方法?
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA貢獻1818條經(jīng)驗 獲得超3個贊

如注釋中所述,正確返回值的 rank-1 數(shù)組。這是有道理的,因為并不總是將值組織在一個塊中(例如),或者值的數(shù)量使得它們不能放入2D數(shù)組中。A[A==some_value]some_valuesome_valuesome_value = 2some_value


但是,如果您確定存在這樣的塊,則可以執(zhí)行以下操作來獲取它:


import numpy as np


inds = np.where(A==8)

slice_x = slice(inds[0].min(), inds[0].max() + 1)  # slice(6, 9, None)

slice_y = slice(inds[1].min(), inds[1].max() + 1)  # slice(3, 6, None)


A[slice_x, slice_y]


# array([[8, 8, 8],

#        [8, 8, 8],

#        [8, 8, 8]])

作為替代方法,您可以使用 來獲取切片:scipy.ndimage.find_objects


from scipy import ndimage


slice_x, slice_y = ndimage.find_objects(A==8)[0]  # (slice(6, 9, None), slice(3, 6, None))


查看完整回答
反對 回復 2022-08-02
?
幕布斯6054654

TA貢獻1876條經(jīng)驗 獲得超7個贊

您可以捕獲和索引,然后僅使用np.ix_方法從這些索引返回子矩陣:rowcolumn


x, y = np.where(A==8) #[5 5 5 6 6 6 7 7 7], [3 4 5 3 4 5 3 4 5]

x, y = np.unique(x), np.unique(y) # [5,6,7], [3,4,5]

print(A[np.ix_(x, y)]) #prints [[8 8 8], [8 8 8], [8 8 8]]

即使在更一般的情況下,這也應該有效,盡管并不總是像預期的那樣:


def submatrix(A):

    x, y = np.where(A==8)

    x, y = np.unique(x), np.unique(y)

    return A[np.ix_(x, y)]


>>> A = np.array([

[8, 2, 8, 2, 8, 0],

[2, 8, 8, 8, 2, 0],

[2, 8, 4, 8, 3, 0],

[0, 8, 8, 8, 0, 0],

[8, 0, 8, 0, 8, 0],

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

>>> submatrix(A)

array([[8, 2, 8, 2, 8],

       [2, 8, 8, 8, 2],

       [2, 8, 4, 8, 3],

       [0, 8, 8, 8, 0],

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

>>> A = np.array([

[8, 2, 8, 2, 8, 0],

[2, 2, 8, 8, 2, 0],

[2, 2, 4, 3, 3, 0],

[0, 2, 8, 8, 0, 0],

[8, 0, 8, 0, 8, 0],

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

>>> submatrix(A) # skipping empty rows and columns

array([[8, 8, 2, 8],

       [2, 8, 8, 2],

       [0, 8, 8, 0],

       [8, 8, 0, 8]])

由于返回排序數(shù)組,因此您可以填充構造的空白,如下所示:np.uniquexy


def submatrix(A):

    x, y = np.where(A==8)

    x, y = np.unique(x), np.unique(y)

    x, y = np.arange(x[0], x[-1]+1), np.arange(y[0], y[-1]+1)

    return A[np.ix_(x, y)]


查看完整回答
反對 回復 2022-08-02
?
慕俠2389804

TA貢獻1719條經(jīng)驗 獲得超6個贊

您可以嘗試以下操作

 data = A[np.any(A==8,axis=1)]
 data.T[np.all(data==8,axis=0)]

這應該給,

 array([[8, 8, 8],
        [8, 8, 8],
        [8, 8, 8]])


查看完整回答
反對 回復 2022-08-02
  • 3 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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