cha*_*com 3 python arrays numpy vector matrix
我对选择NumPy数组的列感到有些困惑,因为结果与Matlab甚至NumPy矩阵不同.请参阅以下案例.
在Matlab中,我们使用以下命令从矩阵中选择列向量.
x = [0, 1; 2 3]
out = x(:, 1)
Run Code Online (Sandbox Code Playgroud)
然后out成为[0; 2]列向量.
使用NumPy Matrix做同样的事情
x = np.matrix([[0, 1], [2, 3]])
out = x[:, 0]
Run Code Online (Sandbox Code Playgroud)
然后输出是np.matrix([[0], [2]])预期的,它是一个列向量.
但是,在NumPy数组的情况下
x = np.array([[0, 1], [2, 3]])
out = x[:, 0]
Run Code Online (Sandbox Code Playgroud)
输出是np.array([0, 2])1维的,因此它不是列向量.我的期望是应该的np.array([[0], [2]]).我有两个问题.
1. 为什么NumPy数组的输出与NumPy矩阵情况不同?这给我带来了很多困惑,但我认为这可能有一些原因.
2. 要从2-Dim NumPy数组中获取列向量,我应该执行其他操作,例如expand_dims
x = np.array([[0, 1], [2, 3]])
out = np.expand_dims(x[:, 0], axis = 1)
Run Code Online (Sandbox Code Playgroud)
hpa*_*ulj 10
在MATLAB中,一切都至少有2个维度.在较旧的MATLAB中,2d是它,现在它们可以有更多.np.matrix以旧的MATLAB为模型.
当您索引3d矩阵时,MATLAB会做什么?
np.array更一般.它可以有0,1,2或更多维度.
x[:, 0]
x[0, :]
Run Code Online (Sandbox Code Playgroud)
两者都选择一列或一行,并返回一个维度较少的数组.
x[:, [0]]
x[[0], :]
Run Code Online (Sandbox Code Playgroud)
将返回具有单个维度的2d数组.
在Octave(MATLAB克隆)中,索引会产生不一致的结果,具体取决于我选择的矩阵的哪一侧:
octave:7> x=ones(2,3,4);
octave:8> size(x)
ans =
2 3 4
octave:9> size(x(1,:,:))
ans =
1 3 4
octave:10> size(x(:,:,1))
ans =
2 3
Run Code Online (Sandbox Code Playgroud)
MATLAB/Octave最后增加了尺寸,显然也很容易将它们压在那边.
numpy在另一个方向订购尺寸,并可根据需要在开始时添加尺寸.但是在索引时挤出单个维度是一致的.
事实上,numpy可以有任意数量的维度,而MATLAB至少有2个是一个关键的区别,经常使MATLAB用户绊倒.但是,没有一个比另一个更合乎逻辑.与一般原理相比,MATLAB的实践更多的是历史问题.
| 归档时间: |
|
| 查看次数: |
12967 次 |
| 最近记录: |