簡體   English   中英

將數組轉換為python標量

[英]Convert array to python scalar

我需要大幫助,請查看此代碼:

import.math

dose =20.0
a = [[[2,3,4],[5,8,9],[12,56,32]]
     [[25,36,45][21,65,987][21,58,89]]
     [[78,21,98],[54,36,78],[23,12,36]]]
PAC = math.exp(-dose*a)

這就是我想做的。 但是我得到的錯誤是

TypeError: only length-1 arrays can be converted to Python scalars

如果你想對數組執行數學運算(無論它們的尺寸如何......),你應該考慮使用專為此設計的NumPy 在您的情況下,相應的NumPy命令將是:

PAC = numpy.exp(-dose*np.array(a))

如果NumPy不是一個選項,你將必須循環a每個元素,計算你的math.exp ,將結果存儲在列表中......真的很麻煩,效率低下。 這是因為當你傳遞一個列表(列表)時, math函數需要一個標量作為輸入(如異常告訴你的那樣)。 但是,您可以在單個列表推導中組合所有循環:

PAC = [[[math.exp(-dose*j) for j in elem] for elem in row] for row in a]

但我再次強烈推薦NumPy。

你應該真的使用NumPy。 以下是使用嵌套循環的方法:

>>> for item in a:
...     for sub in item:
...         for idx, number in enumerate(sub): 
...             print number, math.exp(-dose*number)
...             sub[idx] = math.exp(-dose*number)

使用append很慢,因為每次復制前一個數組並將新項目堆疊到它。 使用枚舉,更改數字。 如果你想保留a的副本,請執行以下操作:

 acopy = a[:]

如果你沒有太多數字,並且NumPy是一個過度殺戮,使用列表推導可以更快地完成上述操作。

如果你願意,為了讓數組的每個元素都乘以-dose然后在結果上應用math.exp,你需要一個循環:

new_a = []
for subarray in a:
    new_sub_array = []
    for element in sub_array:
        new_element = math.exp(-dose*element)
        new_sub_array.append(new_element)
    new_a.append(new_sub_array)

或者,如果你有一個mathlab背景,你可以查詢numpy ,它可以在數組上進行轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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