我很不幸通过numpy数组将一些MATLAB代码转换成Python。在
对num2cell()
有什么共识吗?在
我个人认为这违反了Python/numpy语法。我们的想法是:
使用num2cell
,您将得到一个如下所示的数组
array([[0],[1],[2],[3],[4],[5],[6],[7],[8]])
见the MathWorks documentaiton。在
您可以在numpy中使用列表理解来完成此操作:
matlab_lunacy = np.array([[x] for x in range(0, 9)]
但是为什么MATLAB用户要使用这种数据结构呢?在
纽比的等价物是什么?在
取决于其他代码在做什么。一般来说,Matlab使用单元来表示数组,其中内部数组可以有不同的大小和形状。在
为了回答您的问题,我认为您所做的基本上就是您想要做的,即创建一个数组数组。在
在过去,MATLAB只有一个数据结构,一个矩阵。它可以包含数字或字符,并且总是二维的
添加单元格是为了包含更一般的对象,包括矩阵和字符串。它们还是二维的
Python的列表是1d的,但是可以包含任何内容。
numpy
是在Python上构建的,添加了多维数组。但名单还是有的。在因此,任何将数组转换为列表的东西都可能等价于
num2cell
-不确切,但功能重叠。在在一个列表中换行,会给我们一个包含2个数组的列表(2d):
^{pr2}$
^{3}$tolist
方法执行到列表(嵌套)的完整转换。在list(A)
不常见,当tolist
的意思时,可能会出错。在np.split(A,...)
与B
相似,但子阵列仍然是三维的unpacking
甚至可以工作,基本上是因为A
是一个iterable,[a for a in A]
在第一个维度上拆分{有一个object dtype,with允许您将对象(包括其他数组)放入数组中。但正如许多问题所表明的那样,这些问题可能很难构建。
np.array
试图构造尽可能高维的数组。你得耍些小把戏才能避开这个问题。在==============
在八度音阶中:
scipy.io.loatmat
版本matrix
呈现为二维数组,cell
呈现为对象类型数组(2d),在本例中,包含2d数组。在num2cell
本质上取数组中的每个元素,并将其作为单元矩阵中的单个单元来表示。相当于单元格数组的Python是一个列表。因此,如果您真的想在Python中创建一个num2cell
等效项,那么您将创建一个与Python NumPy数组具有相同维度的列表,并确保该列表中的每个元素都位于正确的位置。类似这样的方法会起作用:这个递归地遍历NumPy数组的每个维度。对于此数组中维度中的每个元素,如果该元素也是一个数组,则对于下一个维度中的每个元素,转换为列表表示。基本情况是当我们实际碰到一个实际的数字,如果是这样的话,只返回实际的数字。在
下面是在Python工作区中定义
^{pr2}$num2cell
之后的一个工作示例:我们可以看到
B
是NumPy数组A
的列表表示。在相关问题 更多 >
编程相关推荐