Python,创建类似Matlab的动态单元数组

2024-09-30 06:34:36 发布

您现在位置:Python中文网/ 问答频道 /正文

您好我应该用python翻译下面的matlab代码,它使用动态单元数组:

NUM=zeros(size(CELLin));    NUM=NUM(:);
jALL=cell(0,0);
r=0;
for k=1:size(CELLin,1)
    r=r+1; NUM(r)=(numel(CELLin{k,1})-1)/2; % Ak NoptN
           jALL{r,1}=[k 1];
    r=r+1; NUM(r)=(numel(CELLin{k,2})-1)/2; % Ak NoptP
           jALL{r,1}=[k 2];
end

提前感谢您的支持。在


Tags: 代码forsizezeros动态cell数组num
1条回答
网友
1楼 · 发布于 2024-09-30 06:34:36

如果我定义

CELLin = {[1,2],[1,2,3];[1,2,3],[1,2,3,4]}

用八度音阶运行你的代码

^{pr2}$

CELLin是一个nx2单元格,NUM给出了扁平布局(n*2行)中单元格元素的某种平均长度。jALL只是一个索引(可能是{})的索引。在

给定CELLin元素的可变长度,最简单的Python翻译使用列表,而不是numpy。列表还允许我在不预先分配的情况下累积结果。例如,MATLAB代码的首字母jALL为(0,0),但它会随着r赋值而增长。在

# nested list; best equivalent to CELL
CELLin = [[[1,2],[1,2,3]],[[1,2,3],[1,2,3,4]]]

NUM = []
jALL = []
r = 0
for k, v in enumerate(CELLin): # iterate of 1st level
   r += 1
   NUM.append( (len(v[0])-1)/2.)
   jALL.append([r,1])
   r += 1
   NUM.append( (len(v[1])-1)/2.)
   jALL.append([r,2])
print(CELLin)
print(NUM)
print(jALL)

生产

1033:~/mypy$ python stack43742171.py 
[[[1, 2], [1, 2, 3]], [[1, 2, 3], [1, 2, 3, 4]]]
[0.5, 1.0, 1.0, 1.5]
[[1, 1], [2, 2], [3, 1], [4, 2]]

如果我加上

CELLin = np.array(CELLin)

它变成一个对象数据类型数组(2d和list元素)

array([[[1, 2], [1, 2, 3]],
      [[1, 2, 3], [1, 2, 3, 4]]], dtype=object)

其余代码运行相同

相关问题 更多 >

    热门问题