簡體   English   中英

從 numpy“數組”的每個元素中減去 0.5

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

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