首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组中分号的MATLAB函数

数组中分号的MATLAB函数
EN

Stack Overflow用户
提问于 2020-04-28 21:10:37
回答 2查看 592关注 0票数 0

我正在尝试将MATLAB编写的代码转换为python脚本。我在MATLAB中不太了解以前的知识,所以我无法弄清楚这段代码在做什么,以及如何将它转换为python。

代码语言:javascript
复制
sumint=[];
for k=1:1:length(d)-(tint-2)
    sumint=[sumint;sum(d(k:k+(tint-2)))]
end

我尝试了一些函数组合,但是输出不匹配

我的代码

代码语言:javascript
复制
sum_disp = []
for i in range(0, len(disp) - (points_grouped - 2)):
    sum_disp.append(sum(disp[i:(i + (points_grouped - 1))]))

sum_disp = np.array(sum_disp)

有人能告诉我如何从MATLAB到python隐藏这段代码吗?

代码语言:javascript
复制
d = disp
tint = points_grouped
sumint = sum_disp

d = [0.02801167 0.03669624 0.0272492  0.0208854  0.0082905  0.01288594
 0.01017967 0.01465445 0.01436482 0.05004975 0.0062021  0.02299043
 0.02368145 0.006786   0.02977529 0.01532477 0.02310713 0.02113559
 0.03423545 0.01603583 0.03599799 0.01562202 0.05216167 0.04165677
 0.01075509 0.01963266 0.03076811 0.02368203 0.04459419 0.01227608
 0.01554692 0.01537159 0.01947022 0.01487557 0.00755353 0.02223923
 0.03342209 0.04716421 0.02321706 0.03620767 0.01531807 0.02143145
 0.07581067 0.09864071 0.06802934 0.08344471 0.04110631 0.02693593
 0.01805178 0.02831497 0.02184237 0.02761051 0.03136386 0.02887697
 0.03444354 0.0232088  0.04235497 0.03862241 0.0228297  0.03749918
 0.03118549 0.01920405 0.04887996 0.03679627 0.03127032 0.03119164
 0.00888661 0.01037151 0.03510487 0.09559838 0.0715161  0.06366703
 0.04879124 0.05652408 0.08160136 0.0707258  0.10876558 0.06095913
 0.06669257 0.14134084 0.11763063 0.08965415 0.06882186 0.11428816
 0.09198447 0.04850028 0.03025621 0.02059732 0.02590883 0.00680715
 0.01868523 0.01118559 0.01455745 0.04500167 0.01250587 0.02199164
 0.0175176  0.02161969 0.00989601 0.07096723 0.05321957 0.07031943
 0.06077753 0.0315616  0.07922844 0.03241386 0.04955126 0.04118749
 0.07775704 0.03544656 0.02747782 0.01317484 0.0086493  0.0066854
 0.03952626 0.04835286 0.04847035 0.04397535 0.0723641  0.12843771
 0.06867013 0.51434501]

MATLAB输出

代码语言:javascript
复制
sumint =

    0.0920
    0.0848
    0.0564
    0.0421
    0.0314
    0.0377
    0.0392
    0.0791
    0.0706
    0.0792
    0.0529
    0.0535
    0.0602
    0.0519
    0.0682
    0.0596
    0.0785
    0.0714
    0.0863
    0.0677
    0.1038
    0.1094
    0.1046
    0.0720
    0.0612
    0.0741
    0.0990
    0.0806
    0.0724
    0.0432
    0.0504
    0.0497
    0.0419
    0.0447
    0.0632
    0.1028
    0.1038
    0.1066
    0.0747
    0.0730
    0.1126
    0.1959
    0.2425
    0.2501
    0.1926
    0.1515
    0.0861
    0.0733
    0.0682
    0.0778
    0.0808
    0.0879
    0.0947
    0.0865
    0.1000
    0.1042
    0.1038
    0.0990
    0.0915
    0.0879
    0.0993
    0.1049
    0.1169
    0.0993
    0.0713
    0.0504
    0.0544
    0.1411
    0.2022
    0.2308
    0.1840
    0.1690
    0.1869
    0.2089
    0.2611
    0.2405
    0.2364
    0.2690
    0.3257
    0.3486
    0.2761
    0.2728
    0.2751
    0.2548
    0.1707
    0.0994
    0.0768
    0.0533
    0.0514
    0.0367
    0.0444
    0.0707
    0.0721
    0.0795
    0.0520
    0.0611
    0.0490
    0.1025
    0.1341
    0.1945
    0.1843
    0.1627
    0.1716
    0.1432
    0.1612
    0.1232
    0.1685
    0.1544
    0.1407
    0.0761
    0.0493
    0.0285
    0.0549
    0.0946
    0.1363
    0.1408
    0.1648
    0.2448
    0.2695
    0.7115
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-28 21:29:15

尝试:

代码语言:javascript
复制
import numpy as np

d = np.array(d)

sumint=np.empty(0)
for k in range(d.size-(tint-2)):
    sumint=np.hstack((sumint, np.sum(d[k:k+(tint-2)])))

产出:

代码语言:javascript
复制
[0.09195711 0.08483084 0.0564251  0.04206184 0.03135611 0.03772006
 0.03919894 0.07906902 0.07061667 0.07924228 0.05287398 0.05345788
 0.06024274 0.05188606 0.06820719 0.05956749 0.07847817 0.07140687
 0.08626927 0.06765584 0.10378168 0.10944046 0.10457353 0.07204452
 0.06115586 0.0740828  0.09904433 0.0805523  0.07241719 0.04319459
 0.05038873 0.04971738 0.04189932 0.04466833 0.06321485 0.10282553
 0.10380336 0.10658894 0.0747428  0.07295719 0.11256019 0.19588283
 0.24248072 0.25011476 0.19258036 0.15148695 0.08609402 0.07330268
 0.06820912 0.07776785 0.08081674 0.08785134 0.09468437 0.08652931
 0.10000731 0.10418618 0.10380708 0.09895129 0.09151437 0.08788872
 0.0992695  0.10488028 0.11694655 0.09925823 0.07134857 0.05044976
 0.05436299 0.14107476 0.20221935 0.23078151 0.18397437 0.16898235
 0.18691668 0.20885124 0.26109274 0.24045051 0.23641728 0.26899254
 0.32566404 0.34862562 0.27610664 0.27276417 0.27509449 0.25477291
 0.17074096 0.09935381 0.07676236 0.0533133  0.05140121 0.03667797
 0.04442827 0.07074471 0.07206499 0.07949918 0.05201511 0.06112893
 0.0490333  0.10248293 0.13408281 0.19450623 0.18431653 0.16265856
 0.17156757 0.1432039  0.16119356 0.12315261 0.16849579 0.15439109
 0.14068142 0.07609922 0.04930196 0.02850954 0.05486096 0.09456452
 0.13634947 0.14079856 0.1648098  0.24477716 0.26947194]
票数 1
EN

Stack Overflow用户

发布于 2020-04-28 21:39:42

最简单的是,它是一个row分隔符:

代码语言:javascript
复制
>> [1,2;3,4]        # octave
ans =

   1   2
   3   4

np.matrix子类使用其字符串语法复制它:

代码语言:javascript
复制
In [1005]: np.matrix('1,2;3,4')                                                                        
Out[1005]: 
matrix([[1, 2],
        [3, 4]])

更传统的numpy输入:

代码语言:javascript
复制
In [1006]: np.array([[1,2],[3,4]])                                                                     
Out[1006]: 
array([[1, 2],
       [3, 4]])

===

在MATLAB中,矩阵本质上是面向列的2d:

代码语言:javascript
复制
>> sumint=[]
sumint = [](0x0)
>> sumint=[sumint; 12]
sumint =  12
>> sumint=[sumint; 12]
sumint =

   12
   12

>> sumint=[sumint; 12]
sumint =

   12
   12
   12

>> size(sumint)
ans =

   3   1

因此,重复的x = [x; y]只是连接在一个新的值上-在第一个维度。相反,使用,,横向连接:

代码语言:javascript
复制
>> sumint=[]
sumint = [](0x0)
>> sumint=[sumint, 12]
sumint =  12
>> sumint=[sumint, 12]
sumint =

   12   12

>> size(sumint)
ans =

   1   2

python的等价物是list追加的:

代码语言:javascript
复制
In [1007]: alist = []                                                                                  
In [1008]: alist.append(12)                                                                            
In [1009]: alist.append(12)                                                                            
In [1010]: alist.append(12)                                                                            
In [1011]: alist                                                                                       
Out[1011]: [12, 12, 12]

您可以重复使用numpy数组进行连接,但是它效率低下,而且通常不鼓励。它在MATLAB中很好,因为它做了相当多的JIT编译。在旧的MATLAB中,它会被人皱眉头。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61490054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档