2017-10-07 40 views
-2

我在MATLAB中有這個功能功能numpy.reshape

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) 

我不知道,如果復古親屬不知道

File "C:/Users/Sergio Malhao/.spyder-py3/Desktop/untitled6.py", line 17, under <module> 
cn = np.reshape (cn_repmat, 1, []) 

File "E: \ Anaconda3 \ lib \ site-packages \ numpy \ core \ fromnumeric.py", line 232, in reshape 
return _wrapfunc (a, 'reshape', newshape, order = order) 

File "E: \ Anaconda3 \ lib \ site-packages \ numpy \ core \ fromnumeric.py", line 57, in _wrapfunc 
return getattr (obj, method) (* args, ** kwds) 

ValueError: Can not reshape the array of size 600000000 in shape (1,) 

回答

3

Numpy不應該是1:1的matlab。它的工作方式類似,但方式不同。 我假設你想要將矩陣轉換爲一維數組。

嘗試:

np.reshape (cn_repmat, (1, -1)) 

其中(1,-1)是新的數組的元組限定的尺寸。

一個形狀尺寸可以是-1。在這種情況下,根據數組的長度和其餘維度推斷出值爲 。

+0

我得到這個:sn [0 1 0 ...,111], cn_repmat [[0 1 0 ...,111]], cn = [[0 1 0 ..., 1 1 1]] Mikaelblomkvistsson –

+0

恭喜。這是正確的還是什麼?如果你想精確到一維,寫:cn = np.squeeze(np.reshape(cn_repmat,(1,-1))) – Mikaelblomkvistsson

1

在八度:

>> 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重塑時的[]

numpyrepeat是基本功能; tile使用repeat具有不同的用戶界面(更像是repmat)。