簡體   English   中英

如何將多個參數傳遞給python函數

[英]How to pass multiple parameters to python function

我有一個包含300個條目的numpy數組。 每個條目內都有另一個numpy數組[2048 x 2048]。

每個條目都是一個“ tiff”條目(矩陣形式),它對應於檢測器中的像素位置。 現在,我要集中處理此問題,以便有一個[2048 x 2048]數組,每個條目都有300個條目,分別對應於300幀中的像素。

我想我已經找到一種使用zip功能的方法。 但是,每次我返回[300 x 2048 x 2048]或[2048 x 300 x 2048]時。

我想要[2048 x 2048 x 300]。 我正在嘗試以一種非常經濟和Python的方式做到這一點,而不僅僅是將其重新加載到新數組中並重新建立索引。

T_prime = zip(([list(t) for t in zip(*Tiffs)])) 

其中, Tiffs是如上所述的數組。

在numpy中,我們通常向數組添加維度,而不是使用嵌套數組(這是帶有示例列表的規范)。 將所有數據保存在單個陣列中后,就可以輕松對其進行操作。 在您的情況下,您似乎要轉置數組。 一個例子:

import numpy as np
example_data = np.empty(30, dtype=object)
for i in range(30):
    example_data[i] = np.zeros((100, 101))

structured = np.array(list(example_data))

print structured.shape
# (30, 100, 101)
print structured.transpose([1, 2, 0]).shape
# (100, 101, 30)

你可以用這種方式

result =  map(lambda x: zip(*x) ,zip(*Tiffs))

這是完整的例子

list1 = [[1,2,3,4],[1,2,3,4],[1,2,3,4]]
list2 =  [[5,6,7,8],[5,6,7,8],[5,6,7,8]]
listoflists = [list1,list2]

result =  map(lambda x: zip(*x) ,zip(*listoflists))
print result

這將導致

[[(1, 5), (2, 6), (3, 7), (4, 8)], [(1, 5), (2, 6), (3, 7), (4, 8)], [(1, 5), (2, 6), (3, 7), (4, 8)]]

您能否將其描述為3個元素組成的數組,每個元素均為2x4數組?

In [300]: Tiffs=np.arange(24).reshape(3,2,4)

In [301]: Tiffs
Out[301]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]],

       [[16, 17, 18, 19],
        [20, 21, 22, 23]]])

In [302]: Tiffs.shape
Out[302]: (3, 2, 4)

如果是這樣,如何進行選擇性轉置?

In [304]: Tiffs.transpose(1,2,0)
Out[304]: 
array([[[ 0,  8, 16],
        [ 1,  9, 17],
        [ 2, 10, 18],
        [ 3, 11, 19]],

       [[ 4, 12, 20],
        [ 5, 13, 21],
        [ 6, 14, 22],
        [ 7, 15, 23]]])

In [305]: _.shape
Out[305]: (2, 4, 3)

它仍然是3D數組,但可以被視為(2x4),每個都有3個項目。

另一種可能性是它實際上是一個對象數組,其中每個對象都是一個2d數組,但是我認為您在構建它時必須付出一些額外的努力。

In [319]: Tiffs
Out[319]: 
array([array([[0, 1, 2, 3],
       [4, 5, 6, 7]]),
       array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]]),
       array([[16, 17, 18, 19],
       [20, 21, 22, 23]])], dtype=object)

進行此處理比較麻煩,因為它實際上是(2,4)數組的(3,)數組,並且軸交換不會越過該object邊界。 可能需要帶zip東西。 zip可以用於轉置嵌套列表,但是您的zip表達式有點令人困惑。

暫無
暫無

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

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