如何使用python在paraview中计算特征值?

如何使用python在paraview中计算特征值?,python,eigenvalue,paraview,Python,Eigenvalue,Paraview,我有一个单元格数据F,它是一个3x3矩阵的数组。我如何计算sqrt(F*F.T矩阵的特征值)并随后附加这个新的单元数据 更新1:这是我的代码。因为线路的原因,它不能工作 C = F.Arrays[0] * F.Arrays[0].T 我怎样才能解决它 import numpy as np import vtk from vtk.numpy_interface import dataset_adapter as da from paraview.numpy_support import vtk_

我有一个单元格数据F,它是一个3x3矩阵的数组。我如何计算sqrt(F*F.T矩阵的特征值)并随后附加这个新的单元数据

更新1:这是我的代码。因为线路的原因,它不能工作

C = F.Arrays[0] * F.Arrays[0].T
我怎样才能解决它

import numpy as np
import vtk
from vtk.numpy_interface import dataset_adapter as da
from paraview.numpy_support import vtk_to_numpy
from paraview.vtk.numpy_interface import algorithms
from paraview.vtk.numpy_interface.algorithms import sqrt as sqrt
from paraview.vtk.numpy_interface.algorithms import eigenvalue as eigenvalue

# This is a VTKCompositeDataArray
F = inputs[0].GetCellData().GetArray('F')

# Of course it does not work! Error:
#   ValueError: operands could not be broadcast together 
#   with shapes (60,3,3) #(3,3,60)
# How to solve it?
C = F.Arrays[0] * F.Arrays[0].T
Eigs = sqrt(eigenvalue(C))
output.CellData.append(Eigs, "EigenValues")
我找到了一个方法:

import numpy as np
import vtk
from vtk.numpy_interface import dataset_adapter as da
from vtk.numpy_interface.algorithms import sqrt as sqrt
from vtk.numpy_interface.algorithms import eigenvalue as eigenvalue
from numpy import linalg as LA

F = inputs[0].GetBlock(0).GetCellData().GetArray('F')

arr = []
for j in range(0, F.GetNumberOfTuples()) :
    f = F.GetTuple(j)
    f = np.reshape(f, (3,3))
    f = f.T*f
    lmbda = np.sqrt(LA.eigvals(f))
    arr.append(lmbda)

vtk_arr = da.VTKArray(arr)
output.CellData.append(vtk_arr,"Lambdas")

看看这个问题:这应该允许您在numpy数组中转换数据,并使用numpy计算任何矩阵运算。谢谢@MathieuWestphal,但不幸的是,这对我没有帮助。我试着把VTK转换成numpy,得到特征值,然后再转换回来。没用!所以,我决定只使用vtKarray,但它也不起作用。我不知道,但vtk数组不支持直接计算。我建议在paraview邮件列表上询问,实际上它们确实支持直接计算,但它们是有限的。