如何将此 Octave/Matlab 代码转换为 Python 3.7.4?
How to convert this Octave/Matlab code to Python 3.7.4?
我有一些工作的 Octave/Matlab 代码,我正在尝试将其工作/转换为 Python 3.7.4,因此我可以在 使用的 Blender 2.82 中使用它Python3.7.4.
有效的 Octave/Matlab 代码是:
c=[7,-2,-4,-8]
[rw col]= size(c); %get size a array
num_of_loops=5 %number of loops to iterate
a= zeros(num_of_loops,col); %allocate memory to array
b= zeros(1,(rw*col)); %allocate memory to array
a(1,:)=c; %add c array to 1st row in array
for n=1:num_of_loops
n
a = c .+ [c(end).*(0:4)].';
b = vec (a.', 2);
endfor
b=reshape(a',1,[]);
这给了我正确的输出:
c=
7 -2 -4 -8
a=
7 -2 -4 -8
-1 -10 -12 -16
-9 -18 -20 -24
-17 -26 -28 -32
-25 -34 -36 -40
b=
7 -2 -4 -8 -1 -10 -12 -16 -9 -18 -20 -24 -17 -26 -28 -32 -25 -34 -36 -40
(如果您需要 if / then / else 命令 这里是 original question。)
我尝试了 online convert octave/matlab to python converter,它给了我下面的代码(它不能完全工作)。如何修复 Python 3.x 代码以使其在使用 Python 3.7.4 的 Blender 2.82 中工作?
c = mcat([7, -2, -4, -8]); print c
[rw, col] = size(c)#get size a array
num_of_loops = 5; print num_of_loops#number of loops to iterate
a = zeros(num_of_loops, col)#allocate memory to array
b = zeros(1, (rw * col))#allocate memory to array
a(1, mslice[:]).lvalue = c#add c array to 1st row in array
for n in mslice[1:num_of_loops]:
n()
mcat([c(end) *elmul* (mslice[0:4])]).T
b = vec(a.T, 2)
end
b = reshape(a.cT, 1, mcat([]))
给定的 MATLAB/Octave 代码可以最小化(另请参阅您的 previous question 上的评论)为:
c = [7, -2, -4, -8]
a = c .+ [c(end).*(0:4)].'
b = vec(a.', 2)
对应的输出为:
c =
7 -2 -4 -8
a =
7 -2 -4 -8
-1 -10 -12 -16
-9 -18 -20 -24
-17 -26 -28 -32
-25 -34 -36 -40
b =
7 -2 -4 -8 -1 -10 -12 -16 -9 -18 -20 -24 -17 -26 -28 -32 -25 -34 -36 -40
MATLAB/Octave 代码可以使用开发人员自己提供的 NumPy. There are a lot of resources on "NumPy for MATLAB users" which can be found online, e.g. this 轻松转移到 Python。
我的解决方案如下所示:
import numpy as np
c = np.array([[7, -2, -4, -8]])
a = c + (np.expand_dims(c[0][-1] * np.arange(5), 1))
b = a.reshape(1, np.prod(a.shape))
# Just for console output
print('c = ')
print(c, '\n')
print('a = ')
print(a, '\n')
print('b = ')
print(b, '\n')
该代码的输出是:
c =
[[ 7 -2 -4 -8]]
a =
[[ 7 -2 -4 -8]
[ -1 -10 -12 -16]
[ -9 -18 -20 -24]
[-17 -26 -28 -32]
[-25 -34 -36 -40]]
b =
[[ 7 -2 -4 -8 -1 -10 -12 -16 -9 -18 -20 -24 -17 -26 -28 -32 -25 -34 -36 -40]]
您可以自行检查您的环境是否支持 NumPy。如果不是,我认为解决方案可能会变得更加复杂。
希望对您有所帮助。
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
NumPy: 1.18.1
Octave: 5.1.0
----------------------------------------
我有一些工作的 Octave/Matlab 代码,我正在尝试将其工作/转换为 Python 3.7.4,因此我可以在 使用的 Blender 2.82 中使用它Python3.7.4.
有效的 Octave/Matlab 代码是:
c=[7,-2,-4,-8]
[rw col]= size(c); %get size a array
num_of_loops=5 %number of loops to iterate
a= zeros(num_of_loops,col); %allocate memory to array
b= zeros(1,(rw*col)); %allocate memory to array
a(1,:)=c; %add c array to 1st row in array
for n=1:num_of_loops
n
a = c .+ [c(end).*(0:4)].';
b = vec (a.', 2);
endfor
b=reshape(a',1,[]);
这给了我正确的输出:
c=
7 -2 -4 -8
a=
7 -2 -4 -8
-1 -10 -12 -16
-9 -18 -20 -24
-17 -26 -28 -32
-25 -34 -36 -40
b=
7 -2 -4 -8 -1 -10 -12 -16 -9 -18 -20 -24 -17 -26 -28 -32 -25 -34 -36 -40
(如果您需要 if / then / else 命令 这里是 original question。)
我尝试了 online convert octave/matlab to python converter,它给了我下面的代码(它不能完全工作)。如何修复 Python 3.x 代码以使其在使用 Python 3.7.4 的 Blender 2.82 中工作?
c = mcat([7, -2, -4, -8]); print c
[rw, col] = size(c)#get size a array
num_of_loops = 5; print num_of_loops#number of loops to iterate
a = zeros(num_of_loops, col)#allocate memory to array
b = zeros(1, (rw * col))#allocate memory to array
a(1, mslice[:]).lvalue = c#add c array to 1st row in array
for n in mslice[1:num_of_loops]:
n()
mcat([c(end) *elmul* (mslice[0:4])]).T
b = vec(a.T, 2)
end
b = reshape(a.cT, 1, mcat([]))
给定的 MATLAB/Octave 代码可以最小化(另请参阅您的 previous question 上的评论)为:
c = [7, -2, -4, -8]
a = c .+ [c(end).*(0:4)].'
b = vec(a.', 2)
对应的输出为:
c =
7 -2 -4 -8
a =
7 -2 -4 -8
-1 -10 -12 -16
-9 -18 -20 -24
-17 -26 -28 -32
-25 -34 -36 -40
b =
7 -2 -4 -8 -1 -10 -12 -16 -9 -18 -20 -24 -17 -26 -28 -32 -25 -34 -36 -40
MATLAB/Octave 代码可以使用开发人员自己提供的 NumPy. There are a lot of resources on "NumPy for MATLAB users" which can be found online, e.g. this 轻松转移到 Python。
我的解决方案如下所示:
import numpy as np
c = np.array([[7, -2, -4, -8]])
a = c + (np.expand_dims(c[0][-1] * np.arange(5), 1))
b = a.reshape(1, np.prod(a.shape))
# Just for console output
print('c = ')
print(c, '\n')
print('a = ')
print(a, '\n')
print('b = ')
print(b, '\n')
该代码的输出是:
c =
[[ 7 -2 -4 -8]]
a =
[[ 7 -2 -4 -8]
[ -1 -10 -12 -16]
[ -9 -18 -20 -24]
[-17 -26 -28 -32]
[-25 -34 -36 -40]]
b =
[[ 7 -2 -4 -8 -1 -10 -12 -16 -9 -18 -20 -24 -17 -26 -28 -32 -25 -34 -36 -40]]
您可以自行检查您的环境是否支持 NumPy。如果不是,我认为解决方案可能会变得更加复杂。
希望对您有所帮助。
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
NumPy: 1.18.1
Octave: 5.1.0
----------------------------------------