【问题标题】:How to convert python arrays to MATLAB readable arrays?如何将 python 数组转换为 MATLAB 可读数组?
【发布时间】:2021-01-12 16:40:33
【问题描述】:

我在 MATLAB 中有一个函数,它需要四个输入

function f = calculate_mat(F,M,a,b). 

这里 F 和 M 是多维数组,“a”和“b”是常数项。

现在我必须在 python 脚本中调用此函数,并在其中提供所有上述输入值。

import matlab.engine
import numpy as np 

# c, a, b are constants
c = 100 
a = 30 
b = 0.2
freal = np.arange(0,30000,10) # real frequency range
fimag = np.arange(0,200,1) # imaginary frequency range 
F = np.zeros((3000,200))
M = np.zeros((3000,200))
for i in range(len(freal)):
    for j in range(len(fimag)):
        F = freal[i] + fimag[j]
        omega = 2 * np.pi * F[i][j]
        kx = omega / c # wave number 
        M[i][j] = np.abs(kx)

eng = matlab.engine.start_matlab()
fst = eng.calculate_mat(F, M, a,b)

但是python脚本抛出错误:“TypeError: unsupported Python data type: numpy.ndarray”

我了解这是因为 Matlab 无法读取 numpy 数组格式。

如何将 numpy 数组转换为 matlab 可读的数组?任何示例都会有所帮助。

【问题讨论】:

  • 请提供包含FMabminimal reproducible example
  • @ThomasSablik。是的,我使用了 matlab.double 函数。 F1 = matlab.double([F], is_complex = True)。但我收到以下错误:“ValueError:初始化程序必须是矩形嵌套序列”
  • 您应该早点向我们提供信息。 [F] 是一个 numpy 数组列表。您不能使用对象列表初始化 matlab 矩阵。您必须使用值F.tolist()。下次请发布包含所有信息和逐字错误消息的完整问题。
  • @ThomasSablik。 'F' 是一个数组。为什么你认为它是一个数组列表?请纠正我,我在代码中的错误。如果您是根据我的评论说的,那么“[F]”是根据我从文档中理解的内容编写的。

标签: python matlab multidimensional-array


【解决方案1】:

您不能使用 numpy 数组调用 matlab 函数。您必须将 numpy 数组转换为 matlab 矩阵:

fst = eng.calculate_mat(matlab.double(F.tolist(), is_complex=True), matlab.double(M.tolist(), is_complex=True), a, b)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    相关资源
    最近更新 更多