在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中处理此问题?
答案 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时,它们并没有真正有用。