我的数据形状为(3000, 4),特征为(产品、商店、周、数量)。数量就是目标。
所以我想将这个矩阵重建为张量,而不混合相应的量。
例如,如果有 30 个产品、20 个商店和 5 周,则张量的形状应为 (5, 20, 30),并具有相应的数量。因为整个数据中不会出现两次类似(商店 A,产品 X,第 3 周)的条目,因此每个商店 x 产品 x 周对应该有一个对应的数量。
关于如何实现这一点有什么建议,或者有任何逻辑错误吗?谢谢。
最佳答案
如果没有假人,您只需仔细整理我们的数据即可。 np.lexsort 可以做到。
假设您的数据类似于 data
:
import numpy as np
dims=a,b,c=30,20,5
data=np.array(list(product(*[np.arange(i) for i in dims+(1,)])))
data[:,-1]=np.random.randint(0,100,a*b*c)
np.random.shuffle(data)
#array([[ 4, 15, 0, 56],
# [27, 16, 2, 3],
# [ 4, 8, 4, 26],
# ...,
# [20, 14, 3, 28],
# [14, 10, 4, 6],
# [19, 14, 3, 39]])
然后您可以根据需要进行排序并重新调整形状,如下所示:
sorteddata=data[np.lexsort(data[:,::-1].T)]
tensor=sorteddata[:,-1].reshape(dims)
现在张量[4,15,0]
是56
。好的!
关于python - 如何在不混合相应条目的情况下将 2D 矩阵转换为 3D 张量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53313913/