Numpy - 如何在不使用 python 循环的情况下转换此数组?
Numpy - How can I transform this array without using python loops?
我的输入是 y_true 标签的列表,其中位置 i
的元素包含 0..len(classes)
范围内的值,并描述了 class 该元素的内容的数据集确实是。 i
的范围从 0
到 len(data)
。示例如下:
# 5 elements in data, 3 classes, all of which had representation in the data:
y_true = [0,2,1,0,1]
我希望我的输出是 len(classes)
的 len(data)
列表列表,其中内部列表 i
将在 [ 的位置有一个 1
=38=][i],和 0
在其他 len(classes)-1
个槽中,示例:
#same configuration as the previous example
y_true = [0,2,1,0,1]
result = [[1,0,0],[0,0,2],[0,1,0],[1,0,0],[0,1,0]]
这是我初始化的方式 result
:
result = np.zeros((len(y_true), max(y_true)+1))
但是我无法在这个问题上取得任何进一步的进展。我尝试使用 add.at(result, y_true, 1)
并将 y_true 的形状翻转过来,但都没有产生我想要的结果。哪些功能可以实现我在这里尝试做的事情?
编辑:为了更清楚地说明我想要实现的目标,我使用了 for 循环:
result = np.zeros((len(y_true), max(y_true)+1))
for x in range(4):
result[x][y_true[x]] = 1
您可以使用花哨的索引:
result = np.zeros((len(y_true), max(y_true)+1), dtype=int)
result[np.arange(len(y_true)), y_true] = 1
输出:
array([[1, 0, 0],
[0, 0, 1],
[0, 1, 0],
[1, 0, 0],
[0, 1, 0]])
备选
一个有趣的替代方法可能是使用 pandas.get_dummies
:
import pandas as pd
result = pd.get_dummies(y_true).to_numpy()
输出:
array([[1, 0, 0],
[0, 0, 1],
[0, 1, 0],
[1, 0, 0],
[0, 1, 0]], dtype=uint8)
我的输入是 y_true 标签的列表,其中位置 i
的元素包含 0..len(classes)
范围内的值,并描述了 class 该元素的内容的数据集确实是。 i
的范围从 0
到 len(data)
。示例如下:
# 5 elements in data, 3 classes, all of which had representation in the data:
y_true = [0,2,1,0,1]
我希望我的输出是 len(classes)
的 len(data)
列表列表,其中内部列表 i
将在 [ 的位置有一个 1
=38=][i],和 0
在其他 len(classes)-1
个槽中,示例:
#same configuration as the previous example
y_true = [0,2,1,0,1]
result = [[1,0,0],[0,0,2],[0,1,0],[1,0,0],[0,1,0]]
这是我初始化的方式 result
:
result = np.zeros((len(y_true), max(y_true)+1))
但是我无法在这个问题上取得任何进一步的进展。我尝试使用 add.at(result, y_true, 1)
并将 y_true 的形状翻转过来,但都没有产生我想要的结果。哪些功能可以实现我在这里尝试做的事情?
编辑:为了更清楚地说明我想要实现的目标,我使用了 for 循环:
result = np.zeros((len(y_true), max(y_true)+1))
for x in range(4):
result[x][y_true[x]] = 1
您可以使用花哨的索引:
result = np.zeros((len(y_true), max(y_true)+1), dtype=int)
result[np.arange(len(y_true)), y_true] = 1
输出:
array([[1, 0, 0],
[0, 0, 1],
[0, 1, 0],
[1, 0, 0],
[0, 1, 0]])
备选
一个有趣的替代方法可能是使用 pandas.get_dummies
:
import pandas as pd
result = pd.get_dummies(y_true).to_numpy()
输出:
array([[1, 0, 0],
[0, 0, 1],
[0, 1, 0],
[1, 0, 0],
[0, 1, 0]], dtype=uint8)