簡體   English   中英

使用列中的索引位置重塑 NumPy 數組

[英]Reshaping NumPy Array with Index Locations in Columns

我有一個3列numpy數組,如下

[0 0 'a'
 0 1 'b'
 1 0 'c'
 1 1 'd']

第一列包含第三列值的行索引,第二列包含列索引。 也就是最終的output應該是

['a' 'b'
 'c' 'd']

如何使用 numpy 將第三列值放入前兩列中指定的索引處的 numpy 數組中? 實際上,我的數據集要大得多(這是用於高清圖像,一張 13000 x 11000 像素的照片,因此效率很重要(避免循環))。

謝謝!

您可以使用numpy 高級索引將值放置在空的實例化數組中。 這是一個示例,假設第三列實際上是數字,值為[1, 3, 5, 7] ,並且您的矩陣是方形的(如果不是,您可以更改空矩陣的形狀,只要您可以得到尺寸)。

ar = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 3, 5, 7]]).T
n = int(np.sqrt(ar.shape[0]))  # Assuming you have a square matrix
out = np.empty([n, n])  # Create a new array of the expected shape
row_idx = ar[:, 0]
col_idx = ar[:, 1]
out[row_idx, col_idx] = ar[:, 2]  # Put the data into the indexed locations

返回:

>> out
array([[1., 3.],
       [5., 7.]])

如果您的第三列實際上是一個字符串,那么它有點棘手,因為您必須在實例化 numpy 數組時指定要處理的字符串的大小,並將索引切片從object轉換回int


編輯:字符串數據的附加信息。 如果您實際上是在嘗試將字符串放入 numpy 數組中,則需要使用 unicode 字符串 dtype dtype='U1' kwarg 到np.empty聲明預期字符串的大小,其中U之后的數字是字符的長度大批。

ar = np.array([[0, 0, 1, 1], [0, 1, 0, 1], ['a', 'b', 'c', 'd']]).T
row_idx = ar[:, 0].astype(int)
col_idx = ar[:, 1].astype(int)
out = np.empty([2, 2], dtype='U1')  # Unicode string
out[row_idx, col_idx] = ar[:, 2]

返回:

>> out
array([['a', 'b'],
       ['c', 'd']], dtype='<U1')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM