Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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_Numpy Ndarray - Fatal编程技术网

Python NumPy使用不同形状但前导尺寸相同的数组保存对象

Python NumPy使用不同形状但前导尺寸相同的数组保存对象,python,numpy-ndarray,Python,Numpy Ndarray,我遇到了np.save()的一些意外行为。 假设您希望将两个numpy数组保存到一个.npy文件中(作为对象)。只要两个数组具有相同的形状,这就可以正常工作,但如果前导维度相同,则会发生错误。 该问题是由np.asanyarray()引起的,它在np.save()中调用。 显然,可以通过保存到不同的文件来解决此问题,但我不是在寻找其他解决方案,我想了解np.save()的这种行为 代码如下: import numpy as np a = np.zeros((10, 5)) b = np.zero

我遇到了
np.save()
的一些意外行为。 假设您希望将两个numpy数组保存到一个
.npy
文件中(作为对象)。只要两个数组具有相同的形状,这就可以正常工作,但如果前导维度相同,则会发生错误。 该问题是由
np.asanyarray()
引起的,它在
np.save()中调用。
显然,可以通过保存到不同的文件来解决此问题,但我不是在寻找其他解决方案,我想了解
np.save()
的这种行为

代码如下:

import numpy as np
a = np.zeros((10, 5))
b = np.zeros((10, 2))
np.save('test', [a, b])
导致此错误的原因:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/python3/lib/python3.6/site-packages/numpy/lib/npyio.py", line 509, in save
arr = np.asanyarray(arr)
File "/python3/lib/python3.6/site-packages/numpy/core/numeric.py", line 544, in asanyarray
return array(a, dtype, copy=False, order=order, subok=True)
ValueError: could not broadcast input array from shape (10,5) into shape (10)

对我来说,
np.save
的这种行为是不一致的,似乎是一个bug

在看到
asanarray
方法(
save
method内部调用它)的源代码后,我看到它试图对使用
array
方法传递的列表进行
ndarray
。现在,如果它们有不同的维度,它可以用两个不同的元素组成一个数组。但是,如果它们具有相同的前导维度,它会尝试将它们一起广播到相同的
ndarray
。这是因为默认情况下,它尝试生成高维输出。要解决此问题,您可以首先使用
empty
方法指定尺寸,然后使用该方法替换如下值:

a=np.zeros((10,5))
b=np.zeros((10,2))
c=[a,b]
finalc = np.empty(len(c),dtype=object)
finalc[:]=c
np.save("file",c)

看起来像是
save
方法尝试组合nArray,如果它们具有相同的第一维度。很有趣。谢谢你的建议。然而,我的问题并不是我没有解决办法,而是我对
np.save
的期望值不一致。它基本上意味着,我需要在每次保存之前用
np.save
检查前导维度是否相同。此外,
np.array
在合并两个数组时出错,这里已经问过基本相同的问题。我的结论是,
np.save
实际上应该只用于保存一个固定维度的数组,而不用于
dtype=object
的结构,尽管它有时可能会起作用。
a=np.zeros((10,5))
b=np.zeros((10,2))
c=[a,b]
finalc = np.empty(len(c),dtype=object)
finalc[:]=c
np.save("file",c)