我有一个python函数Foo
,它返回一个包含3个列表的元组。每个列表包含我想在matlab中操作和绘制的点。目前,我可以使用
data = py.Foo.main(args)
绘制输出证明很困难。 Matlab将“数据”视为python对象。我以前很匆忙,我的快速工作是
function [r] = convertToVector(c)
%make sure everything is numeric so I can plot it
r = [];
for i = 1:length(c)
if isnumeric(c{i})
r = [r c{i}];
end
end
filler = data.cell()
a = convertToVector(filler{1}.cell())
b = convertToVector(filler{1}.cell())
c = convertToVector(filler{1}.cell())
这样可行,但c
我有类似
filler.cell{3}.cell = [0] [-1] [-1] [-1] [0.22] [0.13] [0.08]
当我运行convertToVector
时,一切都是0或-1。我不知道发生了什么事。如果我在控制台玩游戏,我可以得到像
r = [];
z = filler.cell{3}.cell;
r = [r z{1}] >>> r = 0
r = [r z{2}] >>> r = 0 -1
r = [r z{5}] >>> r = 0 -1 0
为什么会这样?如果我分别用z{1} z{2} z{5}
替换0 -1 0.22
,我会得到我期望的结果:r = 0 -1 0.22
。我不经常使用matlab,我不知道是什么原因造成的。我试图将在python中完成的分析结果插入到预先存在的matlab gui中,否则我会避免将这两者连接起来。
修改:在使用whos r
进一步检查时,在首先添加int64
时{}为z{1} to z{4}
,在首先添加double
时{0}}。如果我添加z{5}
double
更改为int64
答案 0 :(得分:1)
根据您的编辑,似乎问题是每个单元格中的初始整数(在python中存储为select empid,
case kpiname when 'Kpi1' then sum(kpivalue) end as 'Kpi1',
case kpiname when 'Kpi2' then sum(kpivalue) end as 'Kpi2'
from
[Kpis]
where kpiname in ('Kpi1', 'Kpi2')
and date = 20160310 and hour = 8
group by empid, kpiname, hour
或int
类型)不会自动转换为{{1这似乎是合理的。如果您将numpy.uint64
连接到double
数组,则double
将转换为uint64
,而不是其他方式。这只是令人惊讶,因为MATLAB非常严重地默认使用double
,所以你可能不会期望这样。
简单的无python演示:
uint64
在此之后,所有三个数组都将具有double
类。好吧,这个例子有点多余,因为a = uint64([3, 4, 5]);
b = [a, 6];
c = [b, 7.3];
是uint64
,所以如果有任何类型转换,那么class(6)
就已经发生了。
解决方案很简单:在函数中明确地转换为double
,
b