Equivalent code in Python when appending arrays

3 views (last 30 days)
Hello everyone,
I've got a problem when trying to translate this code in MATLAB to Python. The problem happened when I tried to append items to list.
dict{1} = [ 24 13; 8 21 ];
dict{2} = [ 2 17; 13 21 ];
dict{3} = [ 17 1; 21 12; 22 15; 21 24; 18 29 ];
dict{4} = [ 24 3; 22 23; 11 25 ];
dict{5} = [ 3 12; 26 18 ];
result = cell(size(dict));
dk = zeros(0,2); rk = {};
for k=1:length(result) % working down, construct sequentially
rp = rk; dp = dk; dk = dict{k}; % bookkeeping and update
rk = num2cell(dk,2); % split rows as cell
[b,loc] = ismember(dk(:,1),dp(:,2)); % check for matching
p = rp(loc(b)); % build the path using for-loop instead of ARRAYFUN
n = dk(b,2);
for j=1:length(p)
p{j} = [p{j} n(j)];
end
rk(b) = p;
result{k} = rk; % assign
end
In Python:
list = {}
list[0] = np.array([[24, 13], [8, 21]])
list[1] = np.array([[2, 17], [13, 21]])
list[2] = np.array([[17, 1], [21, 12], [22, 15], [21, 24], [18, 29]])
list[3] = np.array([[24, 3], [22, 23], [11, 25]])
list[4] = np.array([[3, 12], [26, 18]])
dk = np.zeros((0,2))
rk = {}
result = {}
for k in range(len(list)):
rp = rk
dp = dk
dk = list[k]
rk = num2cell(dk)
[b, loc] = ismember(dk[...,0], dp[...,1])
if k > 0:
p = rp_array[loc]
n = dk[b, 1]
p = np.column_stack((p, n))
rk[b] = p
result[k] = rk
The error is: shape mismatch: value array of shape (1,3) could not be broadcast to indexing result of shape (1,2), which is rk[b] = p. So can anyone please help me find the equivalent code to this?

Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!