如何将多个参数传递给python函数

时间:2016-07-14 20:02:31

标签: python arrays numpy

我有一个有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]。我试图以一种相当经济和pythonic的方式做到这一点,而不仅仅是重新加载到一个新的数组并重新索引。

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

其中Tiffs是如上所述的数组。

3 个答案:

答案 0 :(得分:2)

在numpy中,我们经常将dimmensions添加到数组而不是使用嵌套数组(这是带有示例列表的标准)。将所有数据放在一个阵列中后,就可以轻松对其进行操作。在你的情况下,看起来你正在寻找转置数组。一个例子:

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)

答案 1 :(得分:0)

你可以这样使用

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)]]

答案 2 :(得分:0)

您是否会将此描述为包含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个项目。

另一种可能性是它实际上是一个对象数组,其中每个对象都是一个二维数组,但我认为你不得不付出额外的努力来构建它。

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)

转置它比较棘手,因为它确实是(3)数组(2,4)数组,并且轴交换不会跨越object边界。可能需要zip的东西。 zip可用于转置嵌套列表,但您的zip表达式有点令人困惑。