matlab str2num出错,Matlab调用python,返回vector,str2num不工作返回

我正在写一段Matlab代码,其中它对python进行了多次调用。这些调用以字符串形式返回数据。我遇到的问题是将字符串转换为数字。它并没有那么简单,对于我的两个调用,它转换字符串没有问题,但是对于第三个调用,它只在Matlab命令窗口中的向量不超过一行时才起作用。在

我的代码如下:

呼叫一个

Matlab:wind_direction=sprintf('python C:\\Users\\pduffy\\Documents\\MMI_Raptur_V2\\Python\\Distributions\\CDF.py %f %f %f %f %f %f %f %f %f', N,NE,E,SE,S,SW,W,NW,Iterations);

[status,Wind_Dir_string] = system (wind_direction);

Wind_Dir_shape=str2num(Wind_Dir_string);

Wind_Dir= reshape(Wind_Dir_shape,[],1)

Python

^{pr2}$

呼叫2

Matlabfragment_velocity_string=sprintf('python C:\\Users\\pduffy\\Documents\\MMI_Raptur_V2\\Python\\Distributions\\beta.py %f %f %f %f', lower, mode, upper, Iterations);

[status,Vf_rpm_string] = system (fragment_velocity_string);

Vf_rpm_shape=str2num(Vf_rpm_string);

Vf_rpm= reshape(Vf_rpm_shape,[],1)

Pythonimport sys

import numpy.random

def Beta_Random(lower,mode,upper,Iterations):

Iterations=int(Iterations)

mean=(1/6)*(lower+upper+(4*mode))

a=((mean-lower)*((2*mode)-lower-upper))/((mode-mean)*(upper-lower))

b=(a*(upper-mean))/(mean-lower)

beta_rand=numpy.random.beta(a,b,[Iterations])

rand_sample=(beta_rand*(upper-lower))+lower

return (rand_sample)

if __name__ == '__main__':

lower = float(sys.argv[1])

mode = float(sys.argv[2])

upper = float(sys.argv[3])

Iterations = float(sys.argv[4])

sys.stdout.write(str(Beta_Random(lower,mode,upper,Iterations)))

打三个电话给我

Matlabwind_speed_string=sprintf('python C:\\Users\\pduffy\\Documents\\MMI_Raptur_V2\\Python\\Distributions\\Weibull.py %f %f %f', alpha, beta, Iterations);

[status,Vw_resultant_string] = system (wind_speed_string) ;

Vw_shape=str2num(Vw_resultant_string);

Vw_resultant= reshape(Vw_shape,[],1)

Pythonimport sys

import numpy.random

def Weibull_Random(alpha,beta,Iterations):

a=alpha

b=beta

weibull_rand=numpy.random.weibull(a,[Iterations])

rand_sample=((weibull_rand)*b)

return (rand_sample)

if __name__ == '__main__':

alpha = float(sys.argv[1])

beta = float(sys.argv[2])

Iterations = float(sys.argv[3])

sys.stdout.write(str(Weibull_Random(alpha,beta,Iterations)))

所以无论我将Iterations设置为什么数字,这个数量的值都会返回给Matlab。在所有三个Matlab代码中,我使用str2num来隐藏从Python接收的数据,然后对其进行整形以创建一个单列矩阵。在

对于第三段代码,即引起我问题的代码,我尝试使用numpy.around将python中的数字舍入到四位小数。我选择了四个,因为这与Matlab转换为使用str2num的情况相同。我也尝试过使用str2double,但是返回了一个NAN值。在

所以正如我所说的,对于第一段和第二段代码,Matlab将把从python接收到的所有数据转换成任意数量的Iterations的数字。但是只有在第三段代码的向量不超过一行时才有效,所以目前它只适用于Iterations = 6

这对我来说很奇怪,因为除了在Python中实现的函数外,所有代码部分都非常相似。在

我使用的是Windows7、Matlab2012、Python3和Numpy和Scipy(pyzo2013b)

一如既往,非常感谢您抽出时间,并感谢您提供的任何帮助。在

编辑1-问题已解决

我通过使用Wind_Dir_vector=regexprep(Wind_Dir_string,'\n',' ')解决了这个问题,它用空格字符替换了新行字符。我认为问题是Matlab不能创建一个数组,当结果中每行的列数不相等时,因为它不知道在剩余的单元格中放入什么。在

希望这有道理,我有点赶时间。在

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值