Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试将MATLAB数组转换为Python数组_Python_Arrays_Matlab_Numpy - Fatal编程技术网

尝试将MATLAB数组转换为Python数组

尝试将MATLAB数组转换为Python数组,python,arrays,matlab,numpy,Python,Arrays,Matlab,Numpy,我有这个需要翻译成python的MATLAB代码,但是在firings数组中创建一个新列时有一个问题。在MATLAB中,代码创建了一个最初为空的n*2矩阵,我希望在python中也能这样做。使用NumPy,我创建了fired=np.where(v>=30)。但是,python会创建元组而不是数组,因此会抛出错误: TypeError: unsupported operand type(s) for +: 'int' and 'tuple' 这是我在MATLAB中的代码,我想将其转换为Pytho

我有这个需要翻译成python的MATLAB代码,但是在firings数组中创建一个新列时有一个问题。在MATLAB中,代码创建了一个最初为空的n*2矩阵,我希望在python中也能这样做。使用NumPy,我创建了
fired=np.where(v>=30)
。但是,python会创建元组而不是数组,因此会抛出错误:

TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
这是我在MATLAB中的代码,我想将其转换为Python

firings=[];
firings=[firings; t+0*fired, fired];

谢谢你的帮助!谢谢

如果使用numpy,可以定义一个数据数组:

import numpy as np
firings=np.ndarray(shape=(1,2)
firings[0][0:]=(1.,2.)
firings=np.append(firings,[[3.,4.]],axis=0)
如果数组本质上是1D,则生成两元素元组。对于1D情况,您需要访问
np结果的第一个元素。其中
仅:

fired = np.where(v >= 30)[0]
然后可以继续并连接矩阵。另外一个由提供的建议是,使用它可以等效地在NumPy数组中查找非零值,并将其展平为1D数组,以减少麻烦:

fired = np.flatnonzero(v >= 30)
请注意,如果在激发的
中未找到匹配项,则连接逻辑将不起作用。在查看连接逻辑时,需要考虑这一点。MATLAB的便利之处在于,可以将空矩阵串联在一起,结果没有任何影响(显然)

还要注意的是,NumPy中没有行向量或列向量的概念。它只是一个一维数组。如果您想特别强制数组成为现有的列向量,则需要在第二维度中引入一个单子轴,以便执行此操作。请注意,这仅在
np.where
提供匹配结果的情况下有效。之后,您可以使用和垂直和水平连接数组,以帮助您完成所需的操作。您首先要做的是创建一个空白的2D阵列,然后执行我们刚才介绍的操作:

firings = np.array([[]]) # Create blank 2D array

# Some code here...
# ...
# ...

# fired = find(v >= 30); % From MATLAB
fired = np.where(v >= 30)[0]
# or you can use...
# fired = np.flatnonzero(v >= 30)

if np.size(fired) != 0:
    fired = fired[:, None] # Introduce singleton axis
    # Update firings with two column vectors
    # firings = [firings; t + 0 * fired, fired]; % From MATLAB
    firings = np.vstack([firings, np.hstack([t + 0*fired, fired])])

此处查找NumPy数组中的元素总数。如果
np.where
的结果未生成任何结果,则
中激发的元素数应为0。因此,
if
语句仅在我们在
v
中找到至少一个受
v>=30

约束的元素时执行,您到底是在使用NumPy,还是在使用vanilla Python?而且,错误是非常直接的
fired
是一个
元组
,您正在尝试向元组添加一个整数。这个操作在普通Python中是未定义的。我使用的是NumPy。Fired的值来自:Fired=np。其中(v>=30),其中v是一个n*1向量。如何确保将fired添加到firing中?
np.flatnonzero
对于
1D
情况可能更具表现力。@Divakar aha,用
np.where
替换它。当然