Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将numpy嵌套数组重塑为数组_Python_Arrays_Numpy - Fatal编程技术网

Python 将numpy嵌套数组重塑为数组

Python 将numpy嵌套数组重塑为数组,python,arrays,numpy,Python,Arrays,Numpy,我有一个numpy数组,形状像 a1.shape # 1000 a1[0].shape # (100, 100, 3) 我想用那种方式改变形状 a1.shape # (1000, 100, 100, 3) 我怎样才能做到这一点 只要发布一个解决方案,以防有人需要 x = [] for fname in fl1: x.append( np.array(Image.open(fname))) for i in range(0, len(x)): x[i] = imresize(x[

我有一个numpy数组,形状像

a1.shape
# 1000
a1[0].shape
# (100, 100, 3)
我想用那种方式改变形状

a1.shape
# (1000, 100, 100, 3)

我怎样才能做到这一点

只要发布一个解决方案,以防有人需要

x = []
for fname in fl1:
    x.append( np.array(Image.open(fname)))

for i in range(0, len(x)):
  x[i] = imresize(x[i], [100,100], interp='bilinear')   

y = np.array(x)
y.shape

列出具有不同形状(但元素数量相同)的数组:

结果是一个对象数据类型数组

但如果我们将列表中的所有元素重塑为相同的形状,我们将得到一个3d数组:

In [75]: np.array([x.reshape(2,3) for x in alist])
Out[75]: 
array([[[1, 1, 1],
        [1, 1, 1]],

       [[0, 0, 0],
        [0, 0, 0]],

       [[0, 1, 2],
        [3, 4, 5]]])
现在,让我们在制作阵列后尝试重塑元素:

In [76]: arr = np.array(alist)
In [77]: arr.shape
Out[77]: (3,)
In [78]: for i in range(3):
    ...:     arr[i] = arr[i].reshape(2,3)
    ...:     
In [79]: arr
Out[79]: 
array([array([[1, 1, 1],
       [1, 1, 1]]),
       array([[0, 0, 0],
       [0, 0, 0]]),
       array([[0, 1, 2],
       [3, 4, 5]])], dtype=object)
In [80]: np.array(arr)
Out[80]: 
array([array([[1, 1, 1],
       [1, 1, 1]]),
       array([[0, 0, 0],
       [0, 0, 0]]),
       array([[0, 1, 2],
       [3, 4, 5]])], dtype=object)
对该数组调用
array
不会改变任何东西

但是
stack
确实有效(
stack
只是
连接的一个方便版本):

stack
获取数组列表,或者它是一个数组,在第一维上迭代:

In [83]: np.stack([x for x in arr])
Out[83]: 
array([[[1, 1, 1],
        [1, 1, 1]],

       [[0, 0, 0],
        [0, 0, 0]],

       [[0, 1, 2],
        [3, 4, 5]]])

a1
的所有元素都是相同的形状吗?是的,所有元素都有相同的形状
np.stack(a1)
我试过了,但是a1.shape仍然是(1000),在第一次制作
x1
时跳过
np.array
。收集列表中的数组,并对该列表的元素执行调整大小操作。然后验证
形状
。如果列表中的所有元素具有相同的形状,则
np.array(x1)
将生成所需的多维数组。除非你做了一些聪明的事情,否则数组的对象数组总是由各种形状组成的。
In [82]: np.stack(arr)
Out[82]: 
array([[[1, 1, 1],
        [1, 1, 1]],

       [[0, 0, 0],
        [0, 0, 0]],

       [[0, 1, 2],
        [3, 4, 5]]])
In [83]: np.stack([x for x in arr])
Out[83]: 
array([[[1, 1, 1],
        [1, 1, 1]],

       [[0, 0, 0],
        [0, 0, 0]],

       [[0, 1, 2],
        [3, 4, 5]]])