[英]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.