【发布时间】: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