matopy package¶
Subpackages¶
- matopy.lib package
- Submodules
- matopy.lib.libmatopy module
abs()
all()
any()
arange()
assert_()
ceil()
cell()
cellarray
cellstr
chararray
check_matlabarray_()
clc()
clear()
close()
close_()
concat_()
copy()
deal()
disp()
eig()
end
error()
exist()
false()
fflush()
find()
first_g1_dimension()
floor()
fprintf()
fullfile()
function()
horzcat()
is_column_vector()
is_row_vector()
isa()
iscellstr()
ischar()
isempty()
isequal()
isfield()
ismatrix()
isnan()
isnumeric()
isreal()
isscalar()
isvector()
isvector_or_scalar()
length()
logical_and()
logical_not()
logical_or()
matlabarray
max()
min()
mod()
ndims()
normcdf()
normpdf()
numel()
ones()
print_usage()
qr()
rand()
randn()
ravel()
reshape()
roots()
round()
round_half_up()
rows()
schur()
shared()
size()
size_equal()
sort()
strcmp()
strread()
strrep()
struct
sum()
tic()
toc()
toupper()
true()
try_to_scalar()
unwrap_list()
vconcat_()
version()
vertcat()
zeros()
- matopy.lib.libbasic module
- matopy.lib.libstring module
- matopy.lib.ismember module
- matopy.lib.diff module
- matopy.lib.libdsp module
- matopy.lib.libplot module
- matopy.lib.libstat module
- matopy.lib.mean module
- matopy.lib.round module
- matopy.lib.sign module
- matopy.lib.std module
- matopy.lib.unique module
- matopy.lib.file module
- Module contents
Submodules¶
matopy.lib.libmatopy module¶
- matopy.lib.libmatopy.abs(a)¶
- matopy.lib.libmatopy.all(a)¶
- matopy.lib.libmatopy.any(a)¶
- matopy.lib.libmatopy.arange(start, stop, step=1, **kwargs)¶
创建范围行向量 :argument start: 开始下标 :argument stop: 结束下标,返回的数组包含该下标 :argument step: 步长,可以是负数 :returns: 按步长从 start 到 stop 排列的一组数,类型是 matlabarray。
Examples¶
>>> a=arange(1,10) # 1:10 >>> size(a) matlabarray([[ 1, 10]])
>>> arange(0,1,0.5) matlabarray([[0. , 0.5, 1. ]])
>>> a=arange(0, 1, 0.00025) >>> length(a) 4001
>>> a=arange(0, 0.14700000000000001, 0.00025) >>> length(a) 589
支持空序列: >>> length(arange(2,1)) 0
小数问题: >>> r=arange(18.5495, 25.212249999999997, 0.00025) >>> r.shape[1] 26652
- matopy.lib.libmatopy.assert_(a, b=None, c=None)¶
- matopy.lib.libmatopy.ceil(a)¶
- matopy.lib.libmatopy.cell(*args)¶
- class matopy.lib.libmatopy.cellarray(a=[])¶
基类:
matlabarray
Cell array corresponds to matlab
{}
- class matopy.lib.libmatopy.cellstr(a)¶
基类:
matlabarray
转换为字符向量元胞数组,在 matopy 中,元胞数组也是 matlabarray。
对应 matlab 中的 cellstr() 函数。 注意:本类还未通过测试,不可用!!!
# >>> s=cellstr(chararray(‘helloworldkitty’).reshape((3,5))) # >>> s # >>> s = cellstr([[‘hello’, ‘world’, ‘kitty’]], dtype=object) # >>> s # hello # world # kitty # >>> s.shape # (1, 3)
- class matopy.lib.libmatopy.chararray(a='')¶
基类:
matlabarray
实现 matlab 中`字符数组` char array 的功能。
python 的 str 对象对应于 matlab 的字符串而不是字符数组。
它继承自 matlabarray,除了 dtype 不一样。字符编码统一用 utf8。还不支持 unicode 字符。
可以使用 [:] 下标索引,将返回一个 chararray() 对象。
语法¶
chararray(str) 用字符串构造 chararray 对象。
chararray([int]) 用数字列表构造 chararray 对象。数字是字符的unicode代码(Unicode code point),可以用 chr(n) 转换为字符。
Examples¶
>>> s=chararray() >>> s.shape (0, 0)
>>> s=chararray('helloworld') >>> reshape(s, [2,5]) hlool elwrd
>>> s=chararray([104, 101, 108, 108, 111, 119, 111, 114, 108, 100]) >>> s.shape = 2,5 >>> print(s) hello world
用下标索引:
>>> s=chararray('helloworld') >>> s[1:3] hel
支持 unicode:
>>> s=chararray('你好matlab世界!') >>> s[1:3]
你好m
赋值给元胞数组,应该作为整体赋值:
>>> table_stat=cellarray() >>> table_stat[1,1]=chararray('2023年') >>> type(table_stat[1,1]) <class '...chararray'> >>> table_stat[1,1].shape (1, 5) >>> table_stat[1,1] 2023年
- reshape(shape, order='C')¶
Returns an array containing the same data with a new shape.
Refer to numpy.reshape for full documentation.
See Also¶
numpy.reshape : equivalent function
Notes¶
Unlike the free function numpy.reshape, this method on ndarray allows the elements of the shape parameter to be passed in as separate arguments. For example,
a.reshape(10, 11)
is equivalent toa.reshape((10, 11))
.
- matopy.lib.libmatopy.check_matlabarray_(A)¶
要求 A 必须是 matlabarray 类型,否则抛出异常
- matopy.lib.libmatopy.clc()¶
- matopy.lib.libmatopy.clear(*args)¶
- matopy.lib.libmatopy.close(*args)¶
- matopy.lib.libmatopy.close_(*args)¶
- matopy.lib.libmatopy.concat_(*args)¶
水平合并 2 个数组, 实现 matalb 的 [ 1:2 , 3:4 ] 这些的语句。
可以按行水平合并,concat_([1,2,3,4,5] , [1,2,3,4,5])
- 废弃按列垂直合并的用法,改为用 vconcat_:
按列垂直合并,concat_([[1,2,3,4,5] , [1,2,3,4,5]]) <==废弃 原来的 concat_([[1,2,3], [4,5,6]]) 将返回水平合并的结果: matlabarray([1,2,3,4,5,6])
matlab 函数中没有此函数。
Examples¶
按行合并:
>>> concat_([1,2,3,4,5] , [1,2,3,4,5]) matlabarray([[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]])
支持 matlabarray 2d 的行向量:
>>> concat_(arange(1,3), arange(4,6)) matlabarray([[1, 2, 3, 4, 5, 6]])
按行合并,且支持空数组: >>> concat_(matlabarray([1,2,3,4,5]), matlabarray(), matlabarray([1,2,3,4,5])) matlabarray([[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]])
支持合并标量 >>> concat_(1, 2.3) matlabarray([[1. , 2.3]])
如果参数都是空数组,则返回空数组: >>> concat_(matlabarray(),matlabarray(),matlabarray()) matlabarray([], shape=(0, 0), dtype=float64)
支持垂直合并,当然也可以用 vconcat_: >>> concat_([[1,2,3] , [4,5,6]]) matlabarray([[1, 2, 3],
[4, 5, 6]])
支持外面加 [ ] 的列表形式,将其中的元素水平合并: >>> concat_([arange(1,3) , arange(4,6)]) matlabarray([[1, 2, 3, 4, 5, 6]])
- matopy.lib.libmatopy.copy(a)¶
拷贝一个矩阵, :param a: 矩阵 :return: 和矩阵 a 相同类型的副本矩阵
Examples¶
复制矩阵保持 cellarray 类型: >>> A = cellarray([1,2,3]) >>> B = copy(A) >>> type(B) <class ‘matopy.lib.libmatopy.cellarray’>
>>> A = matlabarray([1,2,3]) >>> B = copy(A) >>> type(B) <class 'matopy.lib.libmatopy.matlabarray'>
# cellstr 转换为字符向量元胞数组 的类、函数还不可用,所以先不测试这种情况 # >>> A = cellstr(chararray(‘helloworldkitty’).reshape((3,5))) # >>> B = copy(A) # >>> type(B) # <class ‘matopy.lib.libmatopy.cellstr’>
>>> A = chararray('abc') >>> B = copy(A) >>> type(B) <class 'matopy.lib.libmatopy.chararray'> >>> B.shape (1, 3)
拷贝要保持 dtype: >>> A = matlabarray([1,2,3], dtype=np.int8) >>> B = copy(A) >>> B.dtype dtype(‘int8’)
- matopy.lib.libmatopy.deal(a, **kwargs)¶
- matopy.lib.libmatopy.disp(*args)¶
- matopy.lib.libmatopy.eig(a)¶
- class matopy.lib.libmatopy.end¶
基类:
object
matlab 中的 end 索引符号
- matopy.lib.libmatopy.error(s)¶
- matopy.lib.libmatopy.exist(a, b)¶
- matopy.lib.libmatopy.false(*args)¶
- matopy.lib.libmatopy.fflush(fp)¶
- matopy.lib.libmatopy.find(a, n=None, d='first', nargout=1)¶
查找非零元素的索引和值 TODO 应该尽可能返回一个有内存的对象
语法¶
k = find(X)
k = find(X,n) 返回与 X 中的非零元素对应的前 n 个索引。
k = find(X,n,direction) 【未实现】
[row,col] = find(___)
[row,col,v] = find(___) 【未实现】
说明¶
k = find(X) 返回一个包含数组 X 中每个非零元素的线性索引的向量。
如果 X 为向量,则 find 返回方向与 X 相同的向量。
如果 X 为多维数组,则 find 返回由结果的线性索引组成的列向量。 注意:一点区别,matlab中find返回的是**列向量**,这里返回的是**行向量**。
k = find(X,n) 返回与 X 中的非零元素对应的前 n 个索引。按列优先方式排列的前 n 个。
- k = find(X,n,direction)(其中 direction 为 ‘last’)查找与 X 中的非零元素对应的最后 n 个索引。
direction 的默认值为 ‘first’,即查找与非零元素对应的前 n 个索引。 【未实现】
[row,col] = find(___) 使用前面语法中的任何输入参数返回数组 X 中每个非零元素的行和列下标。按列优先排列的元素下标。
[row,col,v] = find(___) 还返回包含 X 的非零元素的向量 v。 【未实现】
Examples¶
注意:python 中’比较运算符构成的表达式’要用’()’圆括弧包起来才行,否则会提示错误。
>>> A = matlabarray([[10,20,30],[40,50,60]]) >>> find( (A>=20) & (A<=50) ) # 注意:一点区别,matlab中find返回的是列向量,这里返回的是行向量。 matlabarray([[2, 3, 4, 5]], dtype=int64)
在 3×3 矩阵中查找非零元素。 >>> X = matlabarray([[1, 0, 2], … [0, 1, 1], … [0, 0, 4]]) >>> find(X) matlabarray([[1, 5, 7, 8, 9]], dtype=int64)
对 X 使用逻辑 not 运算符以查找零值。 matlab 中用 ~X 取反,~做的是逻辑运算,而 numpy 是用 not( >>> find(logical_not(X)) matlabarray([[2, 3, 4, 6]], dtype=int64)
如果 X 为多维数组,则 find 返回由结果的线性索引组成的列向量: >>> A = matlabarray([[10,20,30], … [40,50,60]]) >>> idx = find( (A>=20) & (A<=50) ) >>> A[idx] matlabarray([[40, 20, 50, 30]])
取前 n 个数 >>> X = matlabarray([[1, 0, 2], … [0, 1, 1], … [0, 0, 4]]) >>> find(X, 3) matlabarray([[1, 5, 7]], dtype=int64)
返回行列下标: >>> X = matlabarray([[1, 0, 2], … [0, 1, 1], … [0, 0, 4]]) >>> row, col = find(X, nargout=2) >>> row matlabarray([[1, 2, 1, 2, 3]])
>>> col matlabarray([[1, 2, 3, 3, 3]])
返回行列下标,前 n 个: >>> X = matlabarray([[1, 0, 2], … [0, 1, 1], … [0, 0, 4]]) >>> row, col = find(X, 3, nargout=2) >>> row matlabarray([[1, 2, 1]])
>>> col matlabarray([[1, 2, 3]])
对列进行查找: >>> X = matlabarray([[1, 0, 2], … [2, 1, 1], … [2, 0, 4]]) >>> find(X[:,1]==2) matlabarray([[2],
[3]], dtype=int64)
比较的目标对象是 matlabarray >>> target = matlabarray([[2]]) >>> X = matlabarray([[1, 0, 2], … [2, 1, 1], … [2, 0, 4]]) >>> find(X[:,1]==target) matlabarray([[2],
[3]], dtype=int64)
如果是字符串矩阵,需要先转换为对应的数字矩阵再比较才正确: >>> disp_switch = matlabarray([[‘18’,’18’]]) >>> no_sw = disp_switch[1,1].astype(np.float_) >>> distance_table = matlabarray([[ 12, 37800, 29], … [ 12, 37907, 31], … [ 12, 43200, 30], … [ 12, 43000, 30], … [ 12, 43202, 30], … [ 18, 61800, 46], … [ 18, 64217, 50], … [ 18, 69000, 53], … [ 30, 102000, 79], … [ 30, 102400, 79], … [ 39, 136945, 111], … [ 41, 140599, 107], … [ 42, 157200, 113], … [ 42, 157000, 113], … [ 42, 136926, 113], … [ 50, 181363, 149], … [ 50, 176129, 149], … [ 62, 201000, 149]]) >>> find(distance_table[:,1] == no_sw) matlabarray([[6],
[7], [8]], dtype=int64)
find 返回与 x 相同形状的结果矩阵: >>> A = matlabarray([1,2,3]).T >>> B = find(A !=0 ) >>> B.shape (3, 1)
返回最后 n 个下标: >>> from matopy.lib.libbasic import magic >>> X = magic(6) >>> X[1::2] = 0 >>> X matlabarray([[ 0, 0, 0, 0, 0, 0],
[ 3, 32, 7, 21, 23, 25], [ 0, 0, 0, 0, 0, 0], [ 8, 28, 33, 17, 10, 15], [ 0, 0, 0, 0, 0, 0], [ 4, 36, 29, 13, 18, 11]])
>>> find(X,4,'last') matlabarray([[30, 32, 34, 36]], dtype=int64)
- matopy.lib.libmatopy.first_g1_dimension(A)¶
查找大小大于1的第一个数组维度,从 0 开始,是 numpy 约定
如果是标量,返回 0
- matopy.lib.libmatopy.floor(a)¶
此 MATLAB 函数 将 X 的每个元素四舍五入到小于或等于该元素的最接近整数。 :param a: 输入数组,标量 | 向量 | 矩阵 | 多维数组 :return: 输出数组
Examples¶
>>> floor(1.2) 1 >>> floor(-1.2) -2
- matopy.lib.libmatopy.fprintf(fp, fmt, *args)¶
- matopy.lib.libmatopy.fullfile(*args)¶
- matopy.lib.libmatopy.function(f)¶
表示本函数使用 matlab 约定开发,例如:下标从 1 开始等。
还会自动将位置参数、关键字参数转换为 matlabarray 类型,除非参数是 chararray 类型。
- matopy.lib.libmatopy.horzcat(*args)¶
水平合并 2 个数组, 实现 matalb 的 [ 1:2 , 3:4 ] 这些的语句。
可以按行水平合并,concat_([1,2,3,4,5] , [1,2,3,4,5])
- 废弃按列垂直合并的用法,改为用 vconcat_:
按列垂直合并,concat_([[1,2,3,4,5] , [1,2,3,4,5]]) <==废弃 原来的 concat_([[1,2,3], [4,5,6]]) 将返回水平合并的结果: matlabarray([1,2,3,4,5,6])
matlab 函数中没有此函数。
Examples¶
按行合并:
>>> concat_([1,2,3,4,5] , [1,2,3,4,5]) matlabarray([[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]])
支持 matlabarray 2d 的行向量:
>>> concat_(arange(1,3), arange(4,6)) matlabarray([[1, 2, 3, 4, 5, 6]])
按行合并,且支持空数组: >>> concat_(matlabarray([1,2,3,4,5]), matlabarray(), matlabarray([1,2,3,4,5])) matlabarray([[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]])
支持合并标量 >>> concat_(1, 2.3) matlabarray([[1. , 2.3]])
如果参数都是空数组,则返回空数组: >>> concat_(matlabarray(),matlabarray(),matlabarray()) matlabarray([], shape=(0, 0), dtype=float64)
支持垂直合并,当然也可以用 vconcat_: >>> concat_([[1,2,3] , [4,5,6]]) matlabarray([[1, 2, 3],
[4, 5, 6]])
支持外面加 [ ] 的列表形式,将其中的元素水平合并: >>> concat_([arange(1,3) , arange(4,6)]) matlabarray([[1, 2, 3, 4, 5, 6]])
- matopy.lib.libmatopy.is_column_vector(a)¶
是否为`列向量`
一维数组认为是`行向量`不是列向量。
Examples¶
>>> is_column_vector([1,2,3]) False >>> is_column_vector(np.array([1,2,3])) False >>> is_column_vector(np.array([1,2,3]).T) # 一维数组转置后,还是一维数组,所以还不是列向量 False >>> is_column_vector([[1],[2]]) True >>> is_column_vector(matlabarray([1,2,3])) False >>> is_column_vector(matlabarray([[1],[2]])) True >>> is_column_vector(matlabarray()) False
- matopy.lib.libmatopy.is_row_vector(a)¶
是否为`行向量`
一维数组认为是`行向量`。
Examples¶
>>> is_row_vector([1,2,3]) True >>> is_row_vector(np.array([1,2,3])) True >>> is_row_vector([[1],[2]]) False >>> is_row_vector(matlabarray([1,2,3])) True >>> is_row_vector(matlabarray([[1],[2]])) False >>> is_row_vector(matlabarray()) False
- matopy.lib.libmatopy.isa(a, b)¶
- matopy.lib.libmatopy.iscellstr(a)¶
- matopy.lib.libmatopy.ischar(a)¶
- matopy.lib.libmatopy.isempty(a)¶
判断集合a是否为空数组 :argument a: 要判断的参数,可以是 list, ndarray, matlabarray 或任意类型的数据,非 集合类型 的参数 a 一律认为非空。 :returns: True 如果 a 是集合且为空,非 集合类型 的参数 a 一律认为非空。
- matopy.lib.libmatopy.isequal(a, b)¶
- matopy.lib.libmatopy.isfield(a, b)¶
- matopy.lib.libmatopy.ismatrix(a)¶
确定输入是否为矩阵
矩阵是大小为 m×n 的二维数组,其中 m 和 n 是非负整数。
如果 A 是矩阵,TF = ismatrix(A) 将返回逻辑值 1 (true)。否则,将返回逻辑值 0 (false)。
Returns¶
1 如果 a 是矩阵;否则返回 0
只有 matlabarray 和 np.ndarray 才有可能是矩阵,list、tuple 不算矩阵,即便他们是2维的。
Examples¶
>>> ismatrix(matlabarray([[1,2],[3,4]])) 1 >>> ismatrix(matlabarray([[1,2]])) 1
matlabarray 对象默认构造就是2维矩阵: >>> ismatrix(matlabarray([1,2])) 1
除非显式拉平: >>> ismatrix(matlabarray([1,2,3]).flatten()) 0
>>> ismatrix(1) 0
>>> ismatrix([[1,2],[3,4]]) 0
- matopy.lib.libmatopy.isnan(a)¶
确定哪些数组元素为 NaN
语法¶
TF = isnan(A)
TF = isnan(A) 返回一个逻辑数组,其中的 1 (true) 对应 A 中的 NaN 元素,0 (false) 对应其他元素。
未实现、测试:如果 A 包含复数,则 isnan(A) 中的 1 对应实部或虚部为 NaN 值的元素,0 对应实部和虚部均非 NaN 值的元素。
Examples¶
>>> d = NA >>> r = isnan(d) >>> print(r) True
>>> isnan(1) False
>>> r=isnan(matlabarray([1, NA])) >>> print(r) [[False True]]
- matopy.lib.libmatopy.isnumeric(a)¶
- matopy.lib.libmatopy.isreal(a)¶
- matopy.lib.libmatopy.isscalar(a)¶
是否为标量
遵循 matlab 的标准,标量是大小为 1×1 的二维数组。
python变化¶
加上 python、numpy 的规则:
1、如果 a 是 matlabarray 或 numpy.ndarray,那么标量是大小为 1×1 的二维数组。或者只有1个元素的多维数组。 2、如果 a 是其他python类型对象,那么用 numpy.isscalar() 定义的规则,尤其注意: * zero-dimensional numpy arrays 不是 scalar。 * 不可变容器, str 和 tuple 算标量,而 list 不算标量。
Examples¶
>>> isscalar(0) 1
list 不算标量 >>> isscalar([1]) 0
1x1的矩阵算标量 >>> isscalar(matlabarray([0])) 1 >>> isscalar(‘0’) 1
- matopy.lib.libmatopy.isvector(a)¶
是否为向量
向量是大小为 1×N 或 N×1 的二维数组,其中 N 是非负整数。
如果 a 是 list,转换为 matlabarray 对象再检查。
注意:本函数认为空数组不算向量。只有一个元素的矩阵在 matlab 中算‘向量’。
python变化¶
只有 a 是 matlabarray 或 numpy.ndarray 对象才用上面的规则:向量是大小为 1×N 或 N×1 的二维数组,其中 N 是非负整数。
如果 a 是其他 python 类型,例如 int、tuple 等,那么不算向量,算标量。
Returns¶
int: 如果是向量返回 1,否则返回 0
Examples¶
>>> isvector(matlabarray([1,2,3])) 1
只有一个元素的矩阵在 matlab 中算‘向量’: >>> isvector(matlabarray([1])) 1 >>> isvector(matlabarray([[1,2],[3,4]])) 0
list的标准同 matlabarrayar: >>> isvector([1]) 1 >>> isvector([1,2]) 1
空数组不算向量 >>> isvector([]) 0 >>> isvector(matlabarray()) 0
- matopy.lib.libmatopy.isvector_or_scalar(a)¶
是向量或标量
一维数组形状是 [N], 行列矩阵形状分别是 [1 N] 和 [N 1], 以及他们的一般形式 [1 1 … N … 1 1 1].
如果 a 是 matlabarray对象,如果形状是 [1 1 … 1],也算标量.
空数组也算向量。
Examples¶
>>> isvector_or_scalar(1) 1
一个元素的 list 算 vector: >>> isvector_or_scalar([1]) 1
>>> isvector_or_scalar(matlabarray([1])) 1
空向量不算向量: >>> isvector_or_scalar(matlabarray([])) 0
- matopy.lib.libmatopy.length(a)¶
最大数组维度的长度
L = length(X) 返回 X 中最大数组维度的长度。对于向量,长度仅仅是元素数量。对于具有更多维度的数据,长度为 max(size(X))。空数组的长度为零。
>>> length(matlabarray()) 0 >>> length(matlabarray([1,2,3])) 3
空数组的长度为 0 的 numpy 数字对象
>>> length(matlabarray().reshape(0, 11)) 0
支持作为分母而不产生异常:
>>> length(matlabarray().reshape(0, 11))/length(matlabarray().reshape(0, 11)) nan
参数 a 是标量则返回 1 >>> length(1) 1
- matopy.lib.libmatopy.logical_and(a, b)¶
- matopy.lib.libmatopy.logical_not(a)¶
- matopy.lib.libmatopy.logical_or(a, b)¶
- class matopy.lib.libmatopy.matlabarray(a=[], dtype=None)¶
基类:
ndarray
替换matlab矩阵的类
Examples¶
创建空向量:
>>> matlabarray() matlabarray([], shape=(0, 0), dtype=float64)
默认创建行向量:
>>> a = matlabarray([1,2,3]) >>> a.shape (1, 3)
合并多个行向量,创建一个行向量(需要编译器添加 concat() 函数调用,即将
[arange(1,5), arange(1,5)]
变为concat_(arange(1,5), arange(1,5))
):>>> concat_(arange(1,5), arange(1,5)) matlabarray([[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]])
合并多个字符串为一个字符串行向量(需要编译器添加 concat() 函数):
>>> concat_("hello","world") helloworld
支持维度扩展 a = a[:, None] 写法: 正常应该用 np.expand_dims(a, axis)
>>> a = matlabarray([1,2,3]).flatten() >>> a.shape (3,) >>> a = a[:, None] >>> a.shape (3, 1) >>> a matlabarray([[1], [2], [3]])
matlabarray 行向量添加新维度:
>>> a = matlabarray([1,2,3]) >>> a.shape (1, 3) >>> a = a[1, :, None] >>> a matlabarray([[[1], [2], [3]]]) >>> a.shape (1, 3, 1)
空索引返回空数组:
>>> a = matlabarray([1,2,3]) >>> b = a[matlabarray()] >>> b.shape (1, 0) >>> b matlabarray([], shape=(1, 0), dtype=int32)
可以用赋值空list、空数组的方式删除指定的元素:
>>> m = matlabarray([[1,2,3],[4,5,6]]) >>> m[1, :]=[] >>> m matlabarray([[4, 5, 6]])
支持删除指定范围的行:
>>> m = matlabarray([[1,2,3], ... [4,5,6], ... [7,8,9]]) >>> m[2:3, :]=[] >>> m matlabarray([[1, 2, 3]])
支持删除 bool(逻辑)矩阵索引中为 True 的行、列:
>>> A = matlabarray([[1,2,3], ... [4,5,6]]) >>> logic_array = A[:,1]>2 >>> logic_array matlabarray([[False], [ True]]) >>> A[logic_array,:] = matlabarray() >>> A matlabarray([[1, 2, 3]])
用空数组当索引下标,删除记录,应该不改变原矩阵的内容:
>>> m = matlabarray([[1,2,3],[4,5,6]]) >>> m[matlabarray(),:]=matlabarray() >>> m.shape (2, 3)
用‘向量创建’表达式 ‘:’ 创建列:
>>> A = matlabarray() >>> A[:,1] = arange(1, 3, 1) >>> A matlabarray([[1.], [2.], [3.]])
然后用单值创建新的列:
>>> A = matlabarray() >>> A[:,1] = arange(10, 30, 10) >>> A[:,2] = 1 >>> A matlabarray([[10., 1.], [20., 1.], [30., 1.]])
用‘向量创建’表达式 ‘:’ 创建行:
>>> A = matlabarray() >>> A[1,:] = arange(1, 3, 1) >>> A matlabarray([[1., 2., 3.]])
>>> A = matlabarray() >>> A[2,:] = arange(1, 3, 1) >>> A matlabarray([[0., 0., 0.], [1., 2., 3.]]) >>> A[3,:] = 3 >>> A matlabarray([[0., 0., 0.], [1., 2., 3.], [3., 3., 3.]])
中间补0的情况:
>>> A = matlabarray() >>> A[1,:] = arange(1, 3, 1) >>> A[3,:] = 3 >>> A matlabarray([[1., 2., 3.], [0., 0., 0.], [3., 3., 3.]])
>>> A = matlabarray() >>> A[:,1] = arange(1, 3, 1) >>> A[:,3] = 3 >>> A matlabarray([[1., 0., 3.], [2., 0., 3.], [3., 0., 3.]])
和 matlab 一样,如果索引是小数则四舍五入到整数,并提示警告信息:
>>> A = matlabarray(arange(1, 10)) >>> A[5/2: end()] matlabarray([[ 3, 4, 5, 6, 7, 8, 9, 10]])
>>> A[5/3: end()] matlabarray([[ 2, 3, 4, 5, 6, 7, 8, 9, 10]])
>>> A[5/2.3: end()] matlabarray([[ 2, 3, 4, 5, 6, 7, 8, 9, 10]])
bool 索引应该返回正确的值:
>>> A = matlabarray([1, 2, 3]) >>> idx = A >= 1 >>> A[idx] matlabarray([[1, 2, 3]])
创建 0x1 的空数组:
>>> A = matlabarray([]) >>> A = A.reshape(0,1) >>> A matlabarray([], shape=(0, 1), dtype=float64) >>> A.shape (0, 1)
用切片表达式对矩阵赋值: >>> A = matlabarray([[1,2,3], … [4,5,6], … [7,8,9]]) >>> B = matlabarray([[1,2,3], … [4,5,6], … [7,8,9]]) * 10 >>> A[1:3, :] = B >>> A matlabarray([[10, 20, 30],
[40, 50, 60], [70, 80, 90]])
用 arange 切片: >>> A = rand(5,4) >>> B = arange(1., 20.).reshape(5,4) >>> A[arange(1,5), :] = B[:, arange(1,4)] >>> A matlabarray([[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.], [ 9., 10., 11., 12.], [13., 14., 15., 16.], [17., 18., 19., 20.]])
用切片扩展空矩阵: >>> A = matlabarray() >>> B = arange(1, 20).reshape(5,4) >>> A[arange(1,5), :] = B[:, arange(1,4)] >>> A matlabarray([[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.], [ 9., 10., 11., 12.], [13., 14., 15., 16.], [17., 18., 19., 20.]])
>>> A = matlabarray() >>> A[:, arange(1,4)] = B[:, arange(1,4)] >>> A matlabarray([[ 1., 2., 3., 4.], [ 5., 6., 7., 8.], [ 9., 10., 11., 12.], [13., 14., 15., 16.], [17., 18., 19., 20.]])
全数字下标:
>>> A = matlabarray() >>> B = arange(1, 20).reshape(5,4) >>> A[arange(1,5), arange(1,4)] = B[:, arange(1,4)] >>> A matlabarray([[ 1., 2., 3., 4.], [ 5., 6., 7., 8.], [ 9., 10., 11., 12.], [13., 14., 15., 16.], [17., 18., 19., 20.]])
- compute_indices(index)¶
将 matlab 模式的下标对象(通常是 tuple of slice 对象)转换为 python模式的 下标对象。 这里索引的开始约定用 matlab 的,即从 1 开始。
Parameters¶
- index: list of index
索引列表,元素可以是 slice、int 或者 list of int。 索引对象是matlab模式的,未经转换的索引,索引下标从1开始。 也可以是 bool 数组,用来实现 matlab 的’逻辑矩阵下标索引’,matlab 用逻辑索引下标索引得到的结构也是列向量。
Returns¶
Python模式(下标从0开始)的索引对象,用 ndarray 对象表示,每个元素代表一个维度索引。slice切片对象会被展开为ndarray对象。
空切片对象 slice(None) 或 ‘[:]’ 冒号下标,会被展开为本矩阵对应维度的下标列表,列表长度为该维度的长度值。如维度 0 长度是 3 那么 [:,2] index 会返回 ([0,1,2], 1)。
注意:matlab 中冒号表达式的末尾索引是包含关系,如 “1:1:5” 会生成 1,2,3,4,5;但 python 中对应的 slice 表达式末尾是排除关系, 即 python “1:5” 会生成 1,2,3,4;所以返回的索引要正确包含末尾元素。
Examples¶
>>> a = matlabarray([1,2,3]) >>> a.shape (1, 3)
>>> a.compute_indices((1, slice(None,None,None), None)) (0, array([0, 1, 2]), 0)
支持 end() 用在索引中:
>>> A = matlabarray([1,2,3]) >>> A[1, 1:end()-1] matlabarray([[1, 2]]) >>> A[1:end()-1] matlabarray([[1, 2]]) >>> A[end()] 3
和 matlab 一样,如果索引是小数则四舍五入到整数,并提示警告信息:
>>> A = matlabarray(arange(1, 10)) >>> A[5/2: end()] matlabarray([[ 3, 4, 5, 6, 7, 8, 9, 10]])
>>> A[5/3: end()] matlabarray([[ 2, 3, 4, 5, 6, 7, 8, 9, 10]])
>>> A[5/2.3: end()] matlabarray([[ 2, 3, 4, 5, 6, 7, 8, 9, 10]])
支持逻辑矩阵索引:
>>> A = matlabarray([[1, 2, 3],[4,5,6]]) >>> idx = A >= 3 >>> A[idx] matlabarray([[4, 5, 3, 6]])
>>> A = matlabarray([[1, 2, 3],[4,5,6]]) >>> idx = A >= 10 >>> A[idx] matlabarray([], shape=(0, 0), dtype=int32)
>>> A = matlabarray([[1, 2, 3],[4,5,6]]) >>> A[A[:,1]>10, :] matlabarray([], shape=(0, 3), dtype=float64)
支持带步长的 slice(切片) 表达式:
>>> A = matlabarray([[1, 2, 3],[4,5,6]]) >>> A[1:1:2, :] matlabarray([[1, 2, 3], [4, 5, 6]])
>>> A = matlabarray([[1, 2, 3],[4,5,6]]) >>> A[2:-1:1, :] matlabarray([[4, 5, 6], [1, 2, 3]])
支持生成倒排索引:
>>> A = matlabarray([[1, 2, 3],[4,5,6]]) >>> A[end():-1:1, :] matlabarray([[4, 5, 6], [1, 2, 3]])
>>> A = matlabarray([[1, 2, 3],[4,5,6]]) >>> A[:, end():-1:1] matlabarray([[3, 2, 1], [6, 5, 4]])
验证索引访问的正确性: >>> A = matlabarray(arange(1, 60001, 1)) >>> A matlabarray([[ 1, 2, 3, …, 59999, 60000, 60001]]) >>> B = A[13164:-1:13164-100] >>> isequal(arange(13164,13164-101,-1), B) True
- compute_shape(indices)¶
用 python索引 对象计算 shape
Arguments¶
- indices: ndarray
索引对象,用 compute_index() 计算得到的 python模式索引对象。是展开的下标索引对象,而不包含 slice 对象。
Returns¶
tuple: 像 ndarray.shape 一样的元组对象
Examples¶
>>> a = matlabarray([1,2,3]) >>> indices = a.compute_indices((1, slice(None,None,None), None)) >>> print(indices) (0, array([0, 1, 2]), 0)
>>> a.compute_shape(indices) (1, 3, 1)
- get(index)¶
用下标获取本数组的内容
- m_delete_(index)¶
实现 matlab 中的’空赋值’功能,用来删除行、列。
matlab 中空赋值只能具有一个非冒号索引。因为这样删除后的矩阵才整齐。
正确: a(1,:)=[] a(:,:)=[] a(1,:,:)=[] 错误: a(1,1)=[] a(1,2,:)=[]
Arguments¶
- index: list of index
索引列表,是 numpy 类型,从 0 开始,一个元素是一个维度的索引。 冒号下标[:]用 np.empty(0) 表示。
Returns¶
ndarray 删除后的数组拷贝;或者原来的数组对象 self,如果 indices 中没有空 slice,即索引中没有 ‘:’,如 a[1,:]=[]
Examples¶
删除 bool(逻辑)矩阵索引中为 True 的行、列:
>>> A = matlabarray([[1,2,3], ... [4,5,6]]) >>> logic_array = A[:,1]>2 >>> logic_array matlabarray([[False], [ True]]) >>> A[logic_array,:] = matlabarray() >>> A matlabarray([[1, 2, 3]])
删除列:
>>> A = matlabarray([[1,2,3], ... [4,5,6]]) >>> logic_array = A[1,:]==2 >>> logic_array matlabarray([[False, True, False]]) >>> A[:,logic_array] = matlabarray() >>> A matlabarray([[1, 3], [4, 6]])
支持删除 bool 索引矩阵全为 False 的情况,此时应该不删除任何行、列:
>>> A = matlabarray([[1,2,3], ... [4,5,6]]) >>> logic_array = A[:,1]>10 >>> logic_array matlabarray([[False], [False]]) >>> A[logic_array,:] = matlabarray() >>> A matlabarray([[1, 2, 3], [4, 5, 6]])
删除列:
>>> A = matlabarray([[1,2,3], ... [4,5,6]]) >>> logic_array = A[1, :]>10 >>> logic_array matlabarray([[False, False, False]]) >>> A[logic_array,:] = matlabarray() >>> A matlabarray([[1, 2, 3], [4, 5, 6]])
删除行: >>> A = copy(matlabarray([1,2,3,4,5,6]).T) >>> idx = find(A<5) >>> A[idx] = matlabarray() >>> A matlabarray([[5],
[6]])
>>> A = matlabarray([[1,2,3],[4,5,6],[7,8,9]]) >>> idx = [1,2] >>> A[idx] = matlabarray() >>> A matlabarray([[7, 2, 5, 8, 3, 6, 9]])
- sizeof(ix)¶
size of index @return -1 if index is empty array.
- tolist()¶
返回对应的 list 对象,会将多余嵌套去除。
>>> matlabarray([1,2,3]).tolist() [1, 2, 3] >>> matlabarray([[1,2,3]]).tolist() [1, 2, 3] >>> matlabarray([[1,2], [3,4]]).tolist() [[1, 2], [3, 4]]
- matopy.lib.libmatopy.max(a, b=[], d=0, nargout=0)¶
数组的最大元素
语法¶
M = max(A)
C = max(A,B)
其他语法未实现。
Examples¶
>>> max([1,2,3]) 3 >>> max(1, 2) 2
比较 2 个数组:
>>> max([1,2,3], [4,5,1]) matlabarray([[4, 5, 3]])
- matopy.lib.libmatopy.min(a, b=[], d=0, nargout=0)¶
数组最小元素
语法¶
M = min(A)
C = min(A,B)
其他语法未实现。
Examples¶
>>> min([1,2,3]) 1 >>> min(1, 2) 1
比较 2 个数组:
>>> min([1,2,3], [4,5,1]) matlabarray([[1, 2, 1]])
- matopy.lib.libmatopy.mod(a, b)¶
- matopy.lib.libmatopy.ndims(a)¶
- matopy.lib.libmatopy.normcdf(x)¶
- matopy.lib.libmatopy.normpdf(x)¶
- matopy.lib.libmatopy.numel(a)¶
- matopy.lib.libmatopy.ones(*args, **kwargs)¶
- matopy.lib.libmatopy.print_usage()¶
- matopy.lib.libmatopy.qr(a)¶
- matopy.lib.libmatopy.rand(*args, **kwargs)¶
均匀分布的随机数, 此 MATLAB 函数 返回一个在区间 (0,1) 内均匀分布的随机数。 :returns: 在区间 (0,1) 内均匀分布的随机数,float 类型
语法¶
X = rand X = rand(n) X = rand(sz1,...,szN) X = rand(sz) 输入参数 n - 方阵的大小 整数值 sz1,...,szN - 每个维度的大小(作为单独参数) 整数值 sz - 每个维度的大小(作为行向量) 整数值
Examples¶
>>> a=rand() >>> isinstance(a,float) and 0<= a <=1 True
- matopy.lib.libmatopy.randn(*args, **kwargs)¶
- matopy.lib.libmatopy.ravel(a)¶
- matopy.lib.libmatopy.reshape(A, *args)¶
reshape - 重构数组
此 MATLAB 函数 使用大小向量 sz 重构 A 以定义 size(B)。例如,reshape(A,[2,3]) 将 A 重构为一个 2×3 矩阵。sz 必须至少包含 2 个元素,prod(sz) 必须与 numel(A) 相同。
B = reshape(A,sz) B = reshape(A,sz1,...,szN)
- 输入参数
- A - 输入数组
向量 | 矩阵 | 多维数组
- sz - 输出大小
由整数组成的行向量
- sz1,…,szN - 每个维度的大小
两个或以上的整数 | [](可选)
- 输出参数
- B - 重构的数组
向量 | 矩阵 | 多维数组 | 元胞数组
Examples¶
>>> A = arange(1, 10) >>> B = reshape(A, 2, 5) >>> B matlabarray([[ 1, 3, 5, 7, 9], [ 2, 4, 6, 8, 10]])
reshape 不会造成 ‘not own data’: >>> B.base is None True
再次 reshape: >>> reshape(B, 5, 2) matlabarray([[ 1, 6],
[ 2, 7], [ 3, 8], [ 4, 9], [ 5, 10]])
支持 sz 行向量参数: >>> A = arange(1, 10) >>> reshape(A, [2, 5]) matlabarray([[ 1, 3, 5, 7, 9],
[ 2, 4, 6, 8, 10]])
可以指定 [] 的单个维度大小,以便自动计算维度大小: >>> A = arange(1, 10) >>> reshape(A, 2, []) matlabarray([[ 1, 3, 5, 7, 9],
[ 2, 4, 6, 8, 10]])
- matopy.lib.libmatopy.roots(a)¶
- matopy.lib.libmatopy.round(a, decimals=0)¶
实现 matlab 的round()函数,但注意,这里还不是精确的matlab round 函数,不是精确的四舍五入法,而是银行家算法。 即取最近的偶数,例如对 0.5, 1.5 取整,那么 0.5=>0,而 1.5=>2。这和 matlab 中的四舍五入是不一样的。这会让取整后的数更平均,更符合统计学要求。
实现 matlab 的四舍五入取整在 round_half_up 函数中。
Parameters¶
a: 要取整的数 decimals: 小数位数
Returns¶
取整后的数
Examples¶
>>> A = matlabarray([0.5, 1.5, -0.5, -1.5]) >>> round(A) matlabarray([[ 0., 2., -0., -2.]])
支持 dtype=object 的 matlabarray 参数对象,会转为 float_ 类型。 python的 round 是银行家算法,向最近的偶数对齐:
>>> a = matlabarray(1.2345, dtype=np.object_) >>> a.shape (1, 1) >>> round(a, 3) 1.234
- matopy.lib.libmatopy.round_half_up(a)¶
四舍五入取整
Examples¶
>>> round_half_up(0.5) 1 >>> round_half_up(1.5) 2 >>> round_half_up(-0.5) -1 >>> round_half_up(-1.5) -2
- matopy.lib.libmatopy.rows(a)¶
返回矩阵a的行数
- matopy.lib.libmatopy.schur(a)¶
Compute Schur decomposition of a matrix.
- matopy.lib.libmatopy.size(a, dim=0, nargout=1)¶
计算矩阵的尺寸
matlab语法¶
sz = size(A) szdim = size(A,dim) szdim = size(A,dim1,dim2,…,dimN) [sz1,…,szN] = size(___)
Parameters¶
a: 矩阵, 支持的类型有 numpy 的 ndarray、matopy 的 matlabarray 以及 pandas 的 DataFrame b: 维度, dim 从 1 开始,指定要返回的维度,例如 dim=1 返回第一维度的尺寸,dim=2返回第二维度的大小; dim = 0 表示不指定维度。
Returns¶
单个数字:如果指定了 dim 参数。 数组:如果 nargout>1且没有指定 dim 参数,数组元素是对应维度的尺寸,第一个元素是第一维度的尺寸、第二元素是第二维度的尺寸,以此类推。
>>> size(zeros(3,3)) + 1 matlabarray([[4, 4]])
>>> size(matlabarray()) matlabarray([[0, 0]])
>>> size(()) 0
>>> size(np.asarray([1,2,3])) 3
- matopy.lib.libmatopy.size_equal(a, b)¶
- matopy.lib.libmatopy.sort(A, dim=None, direction='ascend')¶
对数组元素排序。 如果 A 是向量,则 sort(A) 对向量元素进行排序。 如果 A 是矩阵,则 sort(A) 会将 A 的列视为向量并对每列进行排序。 如果 A 是多维数组,则 sort(A) 会沿大小不等于 1 的第一个数组维度计算,并将这些元素视为向量。
- 参数:
A – 输入数组
dim – 沿其运算的维度,1 沿列排序,2 沿行排序;None 按第一个大小不为1的维度排序,但如果 A 是矩阵则按列排序。
direction – 排序方向, ‘ascend’ (默认) | ‘descend’ 分别对应升序、降序
- 返回:
B 排序
语法¶
B = sort(A) B = sort(A,dim) B = sort(___,direction) B = sort(___,Name,Value) [B,I] = sort(___)
Examples¶
如果 A 是向量,则 sort(A) 对向量元素进行排序。
>>> A = matlabarray([1,3,2]) >>> sort(A) matlabarray([[1, 2, 3]])
>>> A = matlabarray([1,3,2]).T >>> sort(A) matlabarray([[1], [2], [3]])
指定排序的维度: >>> A = matlabarray([[2,3,1], [1,2,3]]) >>> sort(A, dim=2) matlabarray([[1, 2, 3],
[1, 2, 3]])
>>> sort(A, dim=1) matlabarray([[1, 2, 1], [2, 3, 3]])
对 list 排序: >>> sort([3,1,2]) matlabarray([[1, 2, 3]])
倒序排列: >>> A = matlabarray([[2,3,1], [1,2,3]]) >>> sort(A, dim=2, direction=’descend’) matlabarray([[3, 2, 1],
[3, 2, 1]])
- matopy.lib.libmatopy.strcmp(a, b)¶
- matopy.lib.libmatopy.strread(s, format='', nargout=1)¶
- matopy.lib.libmatopy.strrep(a, b, c)¶
- class matopy.lib.libmatopy.struct(*args)¶
基类:
object
模拟 matlab 的 struct ’结构体数组‘ 类型。
结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。 可以使用 structName.fieldName 格式的圆点表示法来访问字段中的数据。
创建对象¶
当您有数据要放入新的结构体中时,可以使用圆点表示法创建结构体,每次为结构体命名一个字段:
s.a = 1; s.b = ['A','B','C']
语法¶
s = struct s = struct(field,value) s = struct(field1,value1,...,fieldN,valueN) s = struct([]) s = struct(obj)
- matopy.lib.libmatopy.sum(a, dim=1)¶
数组元素总和
如果 A 是矩阵,则 sum(A) 将返回包含每列总和的行向量。
>>> sum(matlabarray([[1,2,3], ... [4,5,6]])) matlabarray([5, 7, 9])
>>> sum(matlabarray([1,2,3])) 6
- matopy.lib.libmatopy.tic()¶
- matopy.lib.libmatopy.toc(t)¶
- matopy.lib.libmatopy.toupper(a)¶
- matopy.lib.libmatopy.true(*args)¶
生成全为 true 的矩阵。 :param args: 可以是一个参数 n,也可以是 size1, size2, … 的形式。 :return: 指定大小的矩阵,元素全为 true。
- matopy.lib.libmatopy.try_to_scalar(marray)¶
将单值的 matlabarray 对象变为 scale 数值
- matopy.lib.libmatopy.unwrap_list(a_list)¶
删除多余的list嵌套,就是将 [[[1,2]]] 变为 [1,2] >>> unwrap_list([[[1,2,3]]]) [1, 2, 3]
>>> unwrap_list([[1]]) [1]
- matopy.lib.libmatopy.vconcat_(*args)¶
垂直合并数组
- 参数:
args – 要合并的数组
- 返回:
合同后的数组
Examples¶
垂直堆叠 arrays: >>> A = matlabarray([[1,2,3],[4,5,6]]) >>> B = matlabarray([7,8,9]) >>> vconcat_(A, B) matlabarray([[1, 2, 3],
[4, 5, 6], [7, 8, 9]])
垂直堆叠不同 shape 的空数组不会报错,会先统一 shape: >>> A = matlabarray().reshape((1, 0)) >>> A.shape (1, 0) >>> B = matlabarray().reshape((0, 0)) >>> B.shape (0, 0) >>> C = vconcat_(A, B) >>> C.shape (1, 0)
- matopy.lib.libmatopy.version()¶
- matopy.lib.libmatopy.vertcat(*args)¶
垂直合并数组
- 参数:
args – 要合并的数组
- 返回:
合同后的数组
Examples¶
垂直堆叠 arrays: >>> A = matlabarray([[1,2,3],[4,5,6]]) >>> B = matlabarray([7,8,9]) >>> vconcat_(A, B) matlabarray([[1, 2, 3],
[4, 5, 6], [7, 8, 9]])
垂直堆叠不同 shape 的空数组不会报错,会先统一 shape: >>> A = matlabarray().reshape((1, 0)) >>> A.shape (1, 0) >>> B = matlabarray().reshape((0, 0)) >>> B.shape (0, 0) >>> C = vconcat_(A, B) >>> C.shape (1, 0)
- matopy.lib.libmatopy.zeros(*args, **kwargs)¶
创建全零数组
- 返回:
全零数组或单个数字
matlab 语法¶
X = zeros X = zeros(n) X = zeros(sz1,...,szN) X = zeros(sz) X = zeros(___,typename) X = zeros(___,'like',p)
X = zeros(___,typename) 返回一个由零组成并且数据类型为 typename 的数组。例如,zeros(‘int8’) 将返回一个 8 位整数标量 0。 您可以使用上述语法中的任何输入参数。
X = zeros(___,’like’,p) 将返回一个与 p 类似的由零值组成的数组,它具有与 p 相同的数据类型(类)、稀疏度和复/实性。 您可以指定 typename 或 ‘like’,但不能同时指定二者。
Examples¶
>>> zeros() 0.0
>>> zeros(3) matlabarray([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])
>>> zeros(3, 2) matlabarray([[0., 0.], [0., 0.], [0., 0.]])
>>> zeros((3, 2)) matlabarray([[0., 0.], [0., 0.], [0., 0.]])
>>> zeros(3, "uint8") matlabarray([[0, 0, 0], [0, 0, 0], [0, 0, 0]], dtype=uint8)
>>> z = zeros(3, "uint8") >>> zeros(3, 'like', z) matlabarray([[0, 0, 0], [0, 0, 0], [0, 0, 0]], dtype=uint8)