2016-04-04 25 views
0

Pythonのnumpyパッケージでは、ndarrayの2次元が空である状況を理解できません。ここに例があります:python numpy配列の空の次元を理解する方法は?

In[1]: d2 = np.random.rand(10) 
    In[2]: d2.shape = (-1, 1) 

    In[3]: print d2.shape 
    In[4]: print(d2) 

    In[5]: print d2[::2, 0].shape 
    In[6]: print d2[::2, 0] 

    Out[3]:(10, 1) 
    Out[4]: 
[[ 0.12362278] 
[ 0.26365227] 
[ 0.33939172] 
[ 0.91501369] 
[ 0.97008342] 
[ 0.95294087] 
[ 0.38906367] 
[ 0.1] 
[ 0.67842086] 
[ 0.23711077]] 

    Out[5]: (5,) 
    Out[6]: [ 0.12362278 0.33939172 0.97008342 0.38906367 0.67842086] 

私の理解では、d2は10行1列のndarrayです。 Out [6]は明らかに1行5列の配列ですが、どのように次元を(5、)にすることができますか? 空の2次次元はどういう意味ですか?

+3

'(5)'があいまいである(むしろ単に '5')ため、'(5、) 'はただ1つの項目でタプルを文字列にする方法です。 – jojonas

+0

"Out [6]は明らかに1行5列の配列です" - いいえ、その配列には "1 by"はありません。一次元で長さが5の唯一の次元です。 – user2357112

答えて

3

1つの重要な違いを説明する1つの例を挙げておきます。

d1 = np.array([1,2,3,4,5]) # array([1, 2, 3, 4, 5]) 
d1.shape -> (5,) # row array.  
d1.size -> 5 
d1.T is the same as d1. 

d2 = d1[np.newaxis] # array([[1, 2, 3, 4, 5]]). Note extra [] 
d2.shape -> (1,5) 
d2.size -> 5 
d2.T will give a column array 
array([[1], 
     [2], 
     [3], 
     [4], 
     [5]]) 
d2.T.shape -> (5,1) 
+0

例をありがとうございます!助けになる –

0

ここで理解しなければならない主な点は、整数によるインデックス付けがスライスによるインデックス付けと異なることです。たとえば、1次元の配列や整数を含むリストにインデックスを付けると、スカラーが得られますが、スライスでインデックスを付けると、それぞれ配列またはリストが得られます。同じことが2d +配列にも当てはまります。だから、例えば:例えば私は、アレイ(3 N)として、空間内のN点を表すことができ、ベクトルの集合として配列を考えるために、時にはその偉大なので

# Make a 3d array: 
import numpy as np 
array = np.arange(60).reshape((3, 4, 5)) 

# Indexing with ints gives a scalar 
print array[2, 3, 4] == 59 
# True 

# Indexing with slices gives a 3d array 
print array[:2, :2, :2].shape 
# (2, 2, 2) 

# Indexing with a mix of slices and ints will give an array with < 3 dims 
print array[0, :2, :3].shape 
# (2, 3) 
print array[:, 2, 0:1].shape 
# (3, 1) 

これは、概念的には本当に便利です:

n_points = np.random.random([10, 3]) 
point_2 = n_points[2] 
print all(point_2 == n_points[2, :]) 
# True 
関連する問題