【问题标题】:How to calculate eigenvalues in paraview using python?如何使用python计算paraview中的特征值?
【发布时间】:2018-03-23 18:49:12
【问题描述】:

我有一个单元格数据 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")

【问题讨论】:

  • 看看这个问题:stackoverflow.com/questions/46132843/… 这应该允许您在 numpy 数组中转换数据并使用 numpy 来计算任何矩阵运算。
  • 谢谢@MathieuWestphal,但不幸的是这对我没有帮助。我尝试从 VTK 转换为 numpy,获取特征值,然后将其转换回来。不工作!所以,我决定只使用 VTKArrays,它也不起作用。
  • 我不知道,但是 vtk 数组不支持直接计算。我建议在 paraview 邮件列表中询问
  • 其实它们确实支持直接计算,但是它们是有限的。

标签: python eigenvalue paraview


【解决方案1】:

我找到了办法:

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")

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多