你好我应该在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
提前感谢您的支持。
答案 0 :(得分:0)
如果我定义
CELLin = {[1,2],[1,2,3];[1,2,3],[1,2,3,4]}
并在Octave中运行您的代码
>> NUM
NUM =
0.50000
1.00000
1.00000
1.50000
>> jALL
jALL =
{
[1,1] =
1 1
[2,1] =
1 2
[3,1] =
2 1
[4,1] =
2 2
CELLin
是一个nx2单元格,NUM
在展平布局(n * 2行)中给出了单元格元素的某种平均长度。 jALL
只是一个索引(可能是NUM
)。
考虑到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)
它成为一个对象dtype数组(带有列表元素的2d)
array([[[1, 2], [1, 2, 3]],
[[1, 2, 3], [1, 2, 3, 4]]], dtype=object)
其余代码运行相同的