【问题标题】:Translate reshape from Matlab to Python将重塑从 Matlab 转换为 Python
【发布时间】:2016-01-21 17:44:38
【问题描述】:

我正在使用 numpy,但我不知道如何将此 MATLAB 代码转换为 python:

C = reshape(A(B.',:).', 6, []).';

我认为我做的唯一正确的事是:

temp=A[B.transpose(),:]

但我不知道如何翻译所有行。

矩阵示例:

A =

 1     2
 1     3
 1     4
 1     5
 1     6
 2     3
 2     4
 2     5
 2     6

B =

 1     2     3
 1     2     4
 1     2     5
 1     2     6
 1     2     7
 1     2     8
 1     2     9

C =

 1     2     1     3     1     4
 1     2     1     3     1     5
 1     2     1     3     1     6
 1     2     1     3     2     3
 1     2     1     3     2     4
 1     2     1     3     2     5
 1     2     1     3     2     6

【问题讨论】:

  • 您能否提供输入和所需输出的示例?
  • 如果您描述了 Matlab 代码实际上做了什么,这可能是一个更容易理解的问题。您是否阅读过面向 Matlab 用户的 numpy 的各种指南?

标签: python matlab numpy multidimensional-array


【解决方案1】:

这看起来像是一个索引加整形操作;要记住的一件事是 numpy 是零索引的,而 matlab 是一索引的。这意味着您需要用B - 1 索引A,然后根据需要重新调整结果。例如:

import numpy as np

A = np.array([[1, 2],
              [1, 3],
              [1, 4],
              [1, 5],
              [1, 6],
              [2, 3],
              [2, 4],
              [2, 5],
              [2, 6]])

B = np.array([[1, 2, 3],
              [1, 2, 4],
              [1, 2, 5],
              [1, 2, 6],
              [1, 2, 7],
              [1, 2, 8],
              [1, 2, 9]])

C = A[B - 1].reshape(B.shape[0], -1)

结果是:

>>> C
array([[1, 2, 1, 3, 1, 4],
       [1, 2, 1, 3, 1, 5],
       [1, 2, 1, 3, 1, 6],
       [1, 2, 1, 3, 2, 3],
       [1, 2, 1, 3, 2, 4],
       [1, 2, 1, 3, 2, 5],
       [1, 2, 1, 3, 2, 6]])

一个可能令人困惑的部分:reshape 方法中的 -1 是一个标记,表示 numpy 应该计算适当的维度以保留数组的大小。

【讨论】:

  • 它的工作我不知道使用A[B-1] 而不是A[B-1,:] 谢谢
  • A[B-1]A[B-1,:] 相同。 numpy 只是为您填写其余的索引。第二种形式对我来说更清晰。
猜你喜欢
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 2017-09-02
  • 2017-11-23
  • 2021-11-16
  • 1970-01-01
相关资源
最近更新 更多