我有一个4D稀疏形状矩阵(21x21x21x21)。只有一个元素将被设置为1.之后,我将向量化该矩阵并确定非零行。整个过程大约需要6分钟来计算太长时间。有没有办法在Python中有效地做到这一点?
sparseMatrix = np.zeros((21,21,21,21), dtype = np.int8)
#w,x,y,z can be any random integer from 0 to 20.
w = 3
x = 5
y = 18
z = 16
sparseMatrix[w, x, y, z] = 1
sparseMatrix_vec = np.reshape(sparseMatrix, [-1,1])
sparseMatrix_vec_index = np.nonzero(sparseMatrix_vec)[0][0]
答案 0 :(得分:1)
如果需要(w,x,y,z)形成一个唯一的整数,其中(w,x,y,z)中的每一个都可以在0到20之间变化,那么只需使用基数21表示。您要查找的整数是:
N = w *(21 ** 0)+ x *(21 ** 1)+ y *(21 ** 2)+ z *(21 ** 3)。
给定一个整数,您可以使用整数除法和模数返回(w,x,y,z)。