簡體   English   中英

函數 numpy.reshape

[英]Function numpy.reshape

我在matlab中有這個功能

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

沒有帶關鍵代碼的python:

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,)

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

嘗試:

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

其中 (1, -1) 是定義新數組大小的元組。

一個形狀維度可以是 -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 中的[]整形時。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM