Я пишу скрипт python, из которого я надеюсь назвать функцию Matlab anovan. я попытался основной тест этой функции в файле test.txt
, который содержит 3 колонки:Вызов функции Matlab из python: «initializer должен быть прямоугольной вложенной последовательностью»
1.472008228227131532e+01 1.000000000000000000e+00 1.000000000000000000e+00
1.423892587976163249e+01 2.000000000000000000e+00 1.000000000000000000e+00
1.434051782779769013e+01 3.000000000000000000e+00 1.000000000000000000e+00
1.478373164841650045e+01 4.000000000000000000e+00 1.000000000000000000e+00
1.463143763527341612e+01 5.000000000000000000e+00 1.000000000000000000e+00
1.580723346731706513e+01 6.000000000000000000e+00 1.000000000000000000e+00
1.964295632547030124e+01 1.000000000000000000e+00 2.000000000000000000e+00
1.922724696768608510e+01 2.000000000000000000e+00 2.000000000000000000e+00
1.886686329445662480e+01 3.000000000000000000e+00 2.000000000000000000e+00
1.960702674675711066e+01 4.000000000000000000e+00 2.000000000000000000e+00
1.983434584140020007e+01 5.000000000000000000e+00 2.000000000000000000e+00
2.050709640103466569e+01 6.000000000000000000e+00 2.000000000000000000e+00
Этот файл импортируется как массив data
. В MATLAB, функция anovan будет называться следующим образом:
anovan(data(:,1),{data(:,2),data(:,3)})
В питона, я пытался вызвать функцию так:
import matlab.engine
eng = matlab.engine.start_matlab()
data = np.genfromtxt('test.txt')
eng.anovan(matlab.double(data[:,0]),matlab.int8(data[:,1:2]))
К сожалению, это дает следующее сообщение об ошибке:
ValueError: initializer must be a rectangular nested sequence
Я вижу, что есть проблема в передаче последних двух столбцов массива функции, но я не уверен в решении. Мы ценим любые предложения.
Аргумент разреза '1: 2' занимает всего один столбец, а именно' 1'. Вы можете попробовать '1: 3' или лучше просто' 1: '(все от' 1' до конца). Сторона примечания: пожалуйста, предоставьте полную трассировку, чтобы каждый мог быть уверен в том, откуда именно возникает ошибка. –