【发布时间】: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 可读的数组?任何示例都会有所帮助。
【问题讨论】:
-
请提供包含
F、M、a和b的minimal 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