函数numpy.reshape

时间:2017-10-07 10:10:06

标签: python numpy reshape

我在matlab中有这个功能

<a target="_blank" href="img_forest.jpg"">
  <img src="img_forest.jpg">

<a target="_blank" href="img_forest110.jpg"">
  <img src="img_forest110.jpg">

<a target="_blank" href="img_forest228.jpg"">
  <img src="img_forest228.jpg">

<a target="_blank" href="img_forest334.jpg"">
  <img src="img_forest334.jpg">

没有关键代码的python:

cn = reshape (repmat (sn, n_rep, 1), 1, []);

我不确定复古血缘关系是否未知

import numpy like np
from numpy.random import randint

M = 2
N = 2 * 10 ** 8 ### data value
n_rep = 3 ## number of repetitions
sn = randint (0, M, size = N) ### integers 0 and 1
print ("sn =", sn)
cn_repmat = np.tile (sn, n_rep)
print ("cn_repmat =", cn_repmat)
cn = np.reshape (cn_repmat, 1, [])
print (cn)

2 个答案:

答案 0 :(得分:3)

Numpy不应该是1:1的matlab。它的工作原理类似,但不是一样的。 我假设您想将矩阵转换为一维数组。

尝试:

.SDF

其中(1,-1)是定义新数组大小的元组。

  

一个形状尺寸可以是-1。在这种情况下,推断出该值   从阵列的长度和剩余的尺寸。

答案 1 :(得分:1)

在Octave:

>> sn = [0,1,2,3,4]
sn =
   0   1   2   3   4
>> repmat(sn,4,1)
ans =
   0   1   2   3   4
   0   1   2   3   4
   0   1   2   3   4
   0   1   2   3   4
>> reshape(repmat(sn,4,1),1,[])
ans =
   0   0   0   0   1   1   1   1   2   2   2   2   3   3   3   3   4   4   4   4

numpy

In [595]: sn=np.array([0,1,2,3,4])
In [596]: np.repeat(sn,4)
Out[596]: array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4])
In [597]: np.tile(sn,4)
Out[597]: array([0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4])

在MATLAB中,矩阵至少为2d;在numpy他们可能是1d。 Out[596]是1d。

通过制作sn 2d:

,我们可以更接近MATLAB
In [608]: sn2 = sn[None,:]    # = sn.reshape((1,-1))
In [609]: sn2
Out[609]: array([[0, 1, 2, 3, 4]])
In [610]: np.repeat(sn2,4,1)
Out[610]: array([[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]])

使用tile我们必须转置或播放订单游戏(MATLAB是订单F):

In [613]: np.tile(sn,[4,1])
Out[613]: 
array([[0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4]])
In [614]: np.tile(sn,[4,1]).T.ravel()
Out[614]: array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4])
In [615]: np.tile(sn,[4,1]).ravel(order='F')
Out[615]: array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4])

ravel相当于reshape(...., -1)。重塑时,-1在MATLAB中的函数类似于[]

numpy repeat是基本功能; tile使用repeat使用不同的用户界面(更像repmat)。