2016-11-26 41 views
0

我有一個需要一個numpy數組的函數。我知道它是形狀 (1,C)或(R,C)Numpy:獨立於數組維數的代碼

我需要的是將每個條目除以其根據列的總和。 我讀this question,並且如果我得到(R,C)數組,則接受的答案有效。但是,對於(1,C)數組,我試圖訪問標量,其維數不存在,並引發錯誤。 有沒有辦法讓這個工作獨立於數組的維度? 見下面我的代碼:

import numpy as np 

def f(x): 
    sums = np.sum(x, axis = 0) 
    return (x/sums[None,:]) 



scores = np.array([[1.0, 2, 3, 6], 
        [2, 4, 5, 6], 
        [3, 8, 7, 6]]) 

print f(scores) 
print f(np.array([1,2,3])) 

我知道爲什麼發生錯誤(金額只是在第二函數調用標量),但我怎麼得到這個沒有一堆if語句的工作嗎?

我很新的numpy,所以原諒我,我真的不知道該怎麼去谷歌。

+0

你問題數組有形狀(3,),而不是(1,3)。打印形狀以查看自己。 – hpaulj

+0

@hpaulj是正確的,請嘗試... x = np.atleast_2d(np.array([1,2,3]))這會產生... x.shape =>(1,3) – NaN

+1

您能否給出您的期望輸出?我想你可能需要'keepdims'在這裏 – Eric

回答

0

您是否在尋找x/np.sum(x, axis=0)[None,:]在這裏沒有有用的效果,並且僅用於在1D情況下拋出錯誤。