我目前正在从Matlab切换到Python,在Matlab中执行一个相当简单的操作在Python中似乎很棘手。
给予
<DatePicker type='date' value={moment(this.props.value)} />
我只找到这种方式来获得以下E:
A = array([0, 0, 0, 0])
B = 1
C = 2
D = array([3, 4])
在Matlab中,只需编写以下命令即可获得相同的E:
E = np.vstack((A, np.hstack((np.array([B, C]), D))))
有没有更简单的方法在Python中获得E?
答案 0 :(得分:3)
作为一年多以前从MATLAB过渡到Python的人,您并不孤单地经历语法学习曲线。完成一些示例后,您就可以理解它了。
正如@abarnert在评论中提到的,只需完成操作即可实例化数组:
import numpy as np
A = np.array([0, 0, 0, 0])
B = 1
C = 2
D = np.array([3, 4])
然后您可以按以下方式构建输出矩阵:
E = np.matrix([A, [B, C, *D]])
哪个给:
[[0 0 0 0]
[1 2 3 4]]
答案 1 :(得分:3)
由于numpy
在Python中运行,因此无法自定义语法。
在八度音阶中:
>> A = [0,0,0,0];
>> B=1;
>> C=2;
>> D=[3,4];
>> E = [A; B,C,D]
E =
0 0 0 0
1 2 3 4
请注意,B
和C
是(1,1)矩阵。 MATLAB没有真正的标量。
np.block
具有一些相同的符号紧凑性:
In [183]: A = np.array([0, 0, 0, 0])
...: B = 1
...: C = 2
...: D = np.array([3, 4])
...:
...:
In [184]: np.block([[A],[B,C,D]])
Out[184]:
array([[0, 0, 0, 0],
[1, 2, 3, 4]])
在封面block
下进行递归连接。
您的np.vstack([A, np.hstack((B,C,D))])
也使用concatenate
:
hstack
首先确保其所有输入至少为1d。因此必须将B
(标量)转换为np.array(B)
In [195]: np.concatenate((np.array([B]),np.array([C]),D))
Out[195]: array([1, 2, 3, 4])
vstack
确保其输入至少为2d。
In [197]: np.concatenate((A[None,:], Out[195][None,:]),axis=0)
Out[197]:
array([[0, 0, 0, 0],
[1, 2, 3, 4]])
MATLAB可能必须进行很多相同类型的转换(尽管本质上所有转换都是从2d开始的)。但是它使用了自己的语法解析器。
如果我们从2d数组开始,嵌套的连接会更简单:
In [198]: A = np.array([[0,0,0,0]])
In [199]: B = np.array([[1]])
In [200]: C = np.array([[2]])
In [201]: D = np.array([[3,4]])
In [203]: np.concatenate((A, np.concatenate((B,C,D),axis=1)), axis=0)
Out[203]:
array([[0, 0, 0, 0],
[1, 2, 3, 4]])
在另一个答案中指出,np.matrix
子类是几年前提供的,它为numpy
提供了一种具有固有2d数组和某些符号相似性的MATLAB感觉。
多玩一点,我发现我实际上不需要block
或np.matrix
。 np.array
起作用:
In [222]: A = np.array([0, 0, 0, 0])
...: B = 1
...: C = 2
...: D = np.array([3, 4])
...:
...:
In [223]: np.array([A,[B,C,*D]])
Out[223]:
array([[0, 0, 0, 0],
[1, 2, 3, 4]])
*D
是Python语法,对numpy
来说不是特殊的东西:
In [224]: [B,C,*D]
Out[224]: [1, 2, 3, 4]
In [225]: [A,[B,C,*D]]
Out[225]: [array([0, 0, 0, 0]), [1, 2, 3, 4]]
np.array
获取最后一个列表并将其转换为数组,与使用np.array([[0,0,0,0],[1,2,3,4]])
相同。