Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中高效地创建和处理4D稀疏矩阵_Python_Matrix_Sparse Matrix - Fatal编程技术网

如何在Python中高效地创建和处理4D稀疏矩阵

如何在Python中高效地创建和处理4D稀疏矩阵,python,matrix,sparse-matrix,Python,Matrix,Sparse Matrix,我有一个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

我有一个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]
如果需要(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)。

在您的项目中,您确定最终总是得到一个包含单个1的21x21x21稀疏矩阵吗?如果是这种情况,我认为您应该简单地更改数据表示形式。只需使用获取数据的过程对1的位置进行编码即可。@ma3oun,谢谢您的回复。你能举个例子说明你是如何编码的吗?是的,我将始终以21x21x21x21稀疏矩阵结束。您还可以使用tensorflow表示稀疏数据。Tensorflow支持稀疏张量,可以更有效地处理这些张量。更多信息:你的稀疏矩阵是如何生成的?我需要知道这一点,然后才能建议一种编码方法。
np.ravel_多_索引([w,x,y,z],[21,21,21,21])
在不构建数组的情况下给出相同的索引。