我有兩個陣列
arr1 = np.array([[4, 1, 3, 2, 5], [5, 2, 4, 1, 3]])
arr2 = np.array([[2], [1]])
我想通過以下方式使用陣列 2 的元素將陣列 1 轉換為二進制陣列
- 對于陣列 1 的第 1 行,我想使用陣列 2 的第 1 行,即 2 - 將陣列 1 的前 2 個值設為 1,其余設為 0
- 同樣,對于陣列 1 的第 2 行,我想使用陣列 2 的第 2 行,即 1 - 將陣列 1 的前 1 個值設為 1,其余設為 0
所以 arr1 將被轉換如下
arr1_transformed = np.array([[1, 0, 0, 0, 1], [1, 0, 0, 0, 0]])
這是我嘗試過的。
arr1_sorted_indices = np.argosrt(-arr1)
這給了我排序陣列的索引
array([[1, 3, 2, 0, 4],
[3, 1, 4, 2, 0]])
現在我想我需要在 arr2 的幫助下屏蔽這個陣列以獲得所需的輸出,但我不知道該怎么做。
uj5u.com熱心網友回復:
這應該在提到的情況下完成作業:
def trasform_arr(arr1,arr2):
for i in range(0,len(arr1)):
if i >= len(arr2):
arr1[i] = [0 for x in arr1[i]]
else:
sorted_arr = sorted(arr1[i])[-arr2[i][0]:]
arr1[i] = [1 if x in sorted_arr else 0 for x in arr1[i]]
arr1 = [[4, 1, 3, 2, 5], [5, 2, 4, 1, 3]]
arr2 = [[2], [1]]
trasform_arr(arr1,arr2)
print(arr1)
uj5u.com熱心網友回復:
您可以嘗試以下操作:
import numpy as np
arr1 = np.array([[4, 1, 3, 2, 5], [5, 2, 4, 1, 3]])
arr2 = np.array([[2],[1]])
r, c = arr1.shape
s = np.argsort(np.argsort(arr1)[:, ::-1])
out = (np.arange(c) < arr2)[np.c_[0:r], s] * 1
print(out)
它給:
[[1 0 0 0 1]
[1 0 0 0 0]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/365834.html
