簡體   English   中英

如何在 numpy 中將 1D arrays 視為(1 by n)2D arrays?

[英]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.

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