[英]Subtract 0.5 from every element of a numpy "array"
使用“a”是一個numpy數組,有時
a = a - 0.5
有效,有時無效。 我不明白的數組有幾種變體。 當我以某種方式打印出來時,它已經變成了這種形式。
[list([0.5, 0.5, 0.2, 1])]
我必須要么強迫它變成這種形式
[[0.5, 0.5, 0.2, 1]]
或者找到某種方法從適用於這兩種變體的每個元素中減去 0.5。
接下來,我想將每個元素乘以 2。
這是產生錯誤的代碼。
類型錯誤:不支持 - 的操作數類型:'list' 和 'float'
import numpy as np
r = np.array(
[
[[.5,.5,2.,1.],0.,2.5]
]
)
p = r[:,0]
print(p) #output is [list([0.5, 0.5, 2.0, 1.0])]
r = (p - 1/2) * 2 #fail
import numpy as np
def flatten(l):
if l == []:
return l
if isinstance(l[0], list):
return flatten(l[0]) + flatten(l[1:])
return l[:1] + flatten(l[1:])
inp = [[[.5,.5,2.,1.],0.,2.5]]
flat = flatten(inp)
r = np.array(flat)
p = r.copy()
print(p)
r = (p - 1/2) * 2
只需要將您的列表展平,遞歸
編輯:
關注你的評論
我有
r = np.array( [ [[.5,.5,2.,1.],0.,2.5] [[.5,.5,2.,1.],0.,2.5] ] )
我想提取第一列並得到形式[[.5,.5,2.,1.] [.5,.5,2.,1.] ]
做就是了
flat = inp[0]
其余的都是一樣的
您的問題是准確理解 numpy 數組是什么。 查看一些文檔,但本質上 numpy 數組是一種特定的數據類型,它允許對數組的維度進行有效的矢量化操作。 所以這意味着數組的每個元素都需要是相同的類型,並且數組必須具有預定義的維度。 python 列表是一個更靈活的容器,它可以接受任意對象到它的元素中,但它的缺點是你不能像在 numpy 中那樣執行有效的向量化操作(以及你希望做的)。
所以基本上你要求一個 numpy 數組包含以下內容:
[.5,.5,2.,1.]
0.
2.5
這些不是所有相同的類型(一個是列表,兩個是浮點數)。
您需要確保這些類型相同(並且維度完全相同),否則 numpy 將無法創建正確的類型化數組。
所以以下將起作用:
a = np.array([.5,.5,2.,1.,0.,2.5])
a -= 0.5
或者,如果您需要一個3 x 3
矩陣,則:
a = np.array([
[.5, .5, 2.],
[1., 0., 2.5],
[0, 0, 0]
])
a -= 0.5
請注意在上面的示例中,每個元素都是一個包含三個浮點數的列表。 如果您將其中一個列表更改為包含 2 個或 4 個浮點數,那么您就打破了 numpy 數組必須具有固定維度並且將不再起作用的想法。
這是有效的。
R = np.matrix(
[ #w x y z height aspect-ratio
[.5,.5,2.,1., 2., 2.5]
]
)
P = R[:,0:4] #get the first four columns
r = (P - 1/2)* 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.