[英]How to treat 1D arrays as (1 by n) 2D arrays in numpy?
如果之前有人問過這個問題,我深表歉意,但我似乎找不到答案,或者我沒有正確尋找答案。
我目前正在使用 numpy 在 python 中編寫代碼,而我的 function 將輸入作為矩陣。 我想將一維數組視為(1×n)二維數組。
這是我的問題的一個最小示例。 下面的 function 取輸入兩個矩陣,將第一個矩陣的左上角元素加到第二個矩陣的右下角元素上。
import numpy as np
def add_corners(A, B):
r = A[0, 0] + B[B.shape[0] - 1, B.shape[1] - 1]
return r
C = np.array([[1, 2, 3], [4, 5, 6]])
D = np.array([[9, 8], [7, 6], [5, 4], [10, 11]])
E = np.array([1, 2, 3, 4, 5])
print(add_corners(C, D))
print(add_corners(C, E))
print(add_corners(C,E))
導致錯誤,因為E.shape[1]
定義不明確。 有沒有辦法解決這個問題而不必添加 if 語句來檢查我的輸入是否包含一維數組? 也就是說,我想將 E 的條目稱為E[1,x]
而不是E[x]
。
任何幫助是極大的贊賞!
您需要添加一個額外的維度。 你可以這樣做:
add_corners(C, E[:, None])
或使用np.expand_dims
:
add_corners(C, np.expand_dims(E, -1))
這是它的樣子:
>>> E
array([1, 2, 3, 4, 5])
>>> E[:, None]
array([[1],
[2],
[3],
[4],
[5]])
>>> E[:, None].shape
(5, 1)
為了更容易和方便的方式,您可以使用平面迭代器:
def add_corners(A, B):
return A.flat[0] + B.flat[-1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.