如何使用python在paraview中计算特征值?
我有一个单元格数据F,它是一个3x3矩阵的数组。我如何计算sqrt(F*F.T矩阵的特征值)并随后附加这个新的单元数据 更新1:这是我的代码。因为线路的原因,它不能工作如何使用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_
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邮件列表上询问,实际上它们确实支持直接计算,但它们是有限的。