Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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 numpy:将操作应用于多维数组_Python_Arrays_Numpy_Multidimensional Array - Fatal编程技术网

Python numpy:将操作应用于多维数组

Python numpy:将操作应用于多维数组,python,arrays,numpy,multidimensional-array,Python,Arrays,Numpy,Multidimensional Array,假设我有一个矩阵矩阵,它是一个四阶张量。与Mathematica中的Map类似,对所有子矩阵应用相同操作的最佳方法是什么? #!/usr/bin/python3 from pylab import * t=random( (8,8,4,4) ) #t2=my_map(det,t) #then shape(t2) becomes (8,8) 编辑 对不起,英语不好,因为它不是我的母语。 我尝试了numpy.linalg.det,但它似乎无法很好地处理3D或4D张量: >>> i

假设我有一个矩阵矩阵,它是一个四阶张量。与Mathematica中的Map类似,对所有子矩阵应用相同操作的最佳方法是什么?

#!/usr/bin/python3
from pylab import *
t=random( (8,8,4,4) )
#t2=my_map(det,t)
#then shape(t2) becomes (8,8)
编辑
对不起,英语不好,因为它不是我的母语。

我尝试了
numpy.linalg.det
,但它似乎无法很好地处理3D或4D张量:

>>> import numpy as np
>>> a=np.random.rand(8,8,4,4)
>>> np.linalg.det(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3/dist-packages/numpy/linalg/linalg.py", line 1703, in det
sign, logdet = slogdet(a)
File "/usr/lib/python3/dist-packages/numpy/linalg/linalg.py", line 1645, in slogdet
_assertRank2(a)
File "/usr/lib/python3/dist-packages/numpy/linalg/linalg.py", line 155, in _assertRank2
'two-dimensional' % len(a.shape))
numpy.linalg.linalg.LinAlgError: 4-dimensional array given. Array must be two-dimensional
>>将numpy作为np导入
>>>a=np.rand.rand(8,8,4,4)
>>>np.linalg.det(a)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python3/dist packages/numpy/linalg/linalg.py”,第1703行,详细信息
符号,logdet=slogdet(a)
文件“/usr/lib/python3/dist packages/numpy/linalg/linalg.py”,第1645行,在SlogSet中
_资产等级2(a)
文件“/usr/lib/python3/dist-packages/numpy/linalg/linalg.py”,第155行,in_-assertRank2
'二维''%len(a.shape))
numpy.linalg.linalg.linalg错误:给定了4维数组。数组必须是二维的
编辑2(已解决)
问题是较旧的numpy版本(numpy 1.8)有一些gufunc可以在C循环中实现这一点:

例如,
numpy.linalg.det()

import numpy as np
a = np.random.rand(8,8,4,4)
np.linalg.det(a)

首先检查您打算使用的操作的文档。许多人有一种方法指定要在哪个轴上操作(
np.sum
)。其他人指定他们使用哪个轴(例如
np.dot

对于
np.linalg.det
,文档包括:

a:(…,M,M)类数组 要计算行列式的输入数组

因此
np.linalg.det(t)
返回一个
(8,8)
数组,使用最后两个维度计算每个
det


虽然可以迭代维度(第一个是默认值),最好编写一个使用整个数组的
numpy
操作的函数。

谢谢你的回答!但是我收到了错误消息:numpy.linalg.linalg.linalg错误:给定了4维数组。数组必须是二维的。你使用numpy 1.8吗?