可变长度的nparrays数组/列表/元组?

时间:2015-05-28 14:37:30

标签: python arrays numpy

在Python中,我有以下问题,制作成玩具示例:

import random
import numpy as np

x_arr = np.array([], dtype = object)
for x in range(5):
    y_arr = np.array([], dtype=object)
    for y in range(5):
        r = random.random()
        if  r < 0.5:
            y_arr = np.append(y_arr,y)
    if random.random() < 0.9:
        x_arr = np.append(x_arr, y_arr)

#This results in
>>> x_arr
array([4, 0, 1, 2, 4, 0, 3, 4], dtype=object)

我想

 array([array([4]), array([0, 1, 2, 4]), array([0, 3, 4]), dtype=object)

显然,在这次运行中,在5次(变量)次中,数组$ y_arr $被写入$ x_arr $,长度为1,4和3(变量)。

append()将结果放在一个长的1D结构中,我希望将其保持为2D。另外,考虑到这个例子,可能根本就没有数字写入(如果你对随机数“不幸”)。所以我有一个先验未知的数组数组,每个数组都有一个先验未知数量的元素。除了在两者上找到一个上限并存储大量零之外,我将如何在Python中处理此问题?

1 个答案:

答案 0 :(得分:1)

您可以分两步完成吗?首先添加一个元素,然后设置元素。当轴=无(默认行为)时,这会绕过np.append()中发生的自动展平,如文档here所述。

<script>

这给出了:

import random
import numpy as np

x_arr = np.array([], dtype = object).reshape((1,0))
for x in range(5):
    y_arr = np.array([], dtype=np.int32)
    for y in range(5):
        r = random.random()
        if  r < 0.5:
            y_arr = np.append(y_arr,y)
    if random.random() < 0.9:
        x_arr = np.append(x_arr, 0)
        x_arr[-1] = y_arr

print type(x_arr)
print x_arr

另外,为什么不为x_arr(或y_arr?)使用python列表。当嵌套numpy数组不是ndarrays时,它们并没有真正有用。