我想能夠轉換數組,如如何從數組中創建1元素數組的數組?
a = np.array([[1,2], [3,4]])
到同一陣列,但各元件作爲1個元素的數組,而不是一個號碼。 所需的輸出將是:
np.array([[np.array([1]), np.array([2])], [np.array([3]), np.array([4])]])
我想能夠轉換數組,如如何從數組中創建1元素數組的數組?
a = np.array([[1,2], [3,4]])
到同一陣列,但各元件作爲1個元素的數組,而不是一個號碼。 所需的輸出將是:
np.array([[np.array([1]), np.array([2])], [np.array([3]), np.array([4])]])
您所描述的操作非常很少有用。更有可能的是,這將是一個更好的主意,長度爲1的一個額外的維度添加到您的數組的末尾:
a = a[..., np.newaxis]
# or
a = a.reshape(a.shape + (1,))
然後a[0, 1]
將是一維數組,但所有的美好NumPy的功能,如廣播和ufuncs會工作的權利。請注意,這會創建原始數組的視圖;如果您需要獨立副本,則可以撥打copy()
方法。
如果你真的想要一個二維數組,其元素是一維數組,NumPy不會讓你變得那麼容易。 (組織數據幾乎不是一種好的方法,所以NumPy開發人員沒有太多理由提供一種簡單的方法來完成它。)您可能希望創建這樣一個數組的大部分內容將創建一個3D陣列。最直接的辦法做到這一點我知道的是創建對象D型的空數組和填充細胞一個接一個,使用普通的Python循環:
b = numpy.empty(a.shape, dtype=object)
for i in range(a.shape[0]):
for j in range(a.shape[1]):
b[i, j] = numpy.array([a[i, j]])
np.array([ [ [x] for x in row ] for row in [[1,2], [3,4]] ])
目前尚不完全清楚OP正在尋找什麼行爲,但即使這產生了,它也是一種可怕的方式。使用列表解析幾乎可以消除NumPy的所有好處。 – user2357112
Numpy非常適合對數組進行數學處理(點積,轉置,乘法等),但是如果你沒有完成其中一項工作,你可以在python中完成。 – singron
你可以用Python來完成,但是你會讓代碼變得非常糟糕,並且在array [...,None] .copy()方面的速度下降1000倍,或者只是用'數組[...,無]'。 NumPy可以做更多的數組形狀操作,而不僅僅是'thing.T'。 – user2357112
你的戰鬥np.array
企圖創造一個高維陣列。
例如,你想要表達的,輸入的時候,產生了一個(2,2,1)陣列:
a2 = np.array([[np.array([1]), np.array([2])], [np.array([3]), np.array([4])]])
In [172]: a2
Out[172]:
array([[[1],
[2]],
[[3],
[4]]])
這實際上可能是你想要的(儘管印刷出場),因爲
In [180]: a2[0,0]
Out[180]: array([1])
經常打的numpy
的傾向提出更高的第二陣列的最好辦法,就是初始化它用正確的shape
和dtype
爲空,然後往裏面:
In [183]: a1=np.empty(a.shape,dtype=object)
In [184]: a1.flat=[np.array(x) for x in a.flatten()]
In [185]: a1
Out[185]:
array([[array(1), array(2)],
[array(3), array(4)]], dtype=object)
它具有正確的形狀(2,2)和dtype。元素是數組 - 但它們的尺寸是「錯誤的」,而不是(1,)
,而不是()
。 flat
和flatten
是用於迭代nd數組的好用工具,就像它們是1d一樣。
a1.flat=[np.array([x]) for x in a.flatten()]
不起作用 - 它是ints
的一個數組,如a
,但帶有對象dtype。
更明確的反覆做工作:
In [214]: a1=np.empty(a.shape,dtype=object)
In [215]: for i in np.ndindex(2,2):
a1[i]=np.array([a[i]])
In [216]: a1
Out[216]:
array([[array([1]), array([2])],
[array([3]), array([4])]], dtype=object)
你爲什麼要這麼做?在幾乎所有的情況下,似乎都沒有必要和適得其反。也許你需要爲你的數組添加一個額外的維度('a [...,None]')或者[數組標量](http://docs.scipy.org/doc/numpy/reference/arrays。 scalars.html)機制讓你可以用你最初的'a'來做你需要做的事情。 – user2357112
另外,澄清; 'np。array([[[1],[2]],[[3],[4]]])匹配你想要的,還是你真的想要一個其中有其他arrray對象的數組,而不是一個三維數組? – user2357112