如何高效地创建和处理 Python 中的 4D 稀疏矩阵
How to create and process a 4D sparse matrix in Python efficiently
我有一个形状为 (21x21x21x21) 的 4D 稀疏矩阵。只有一个元素将被设置为 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]
如果您需要 (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)。
我有一个形状为 (21x21x21x21) 的 4D 稀疏矩阵。只有一个元素将被设置为 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]
如果您需要 (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)。