Python np.asarray(标量)的输出是什么?
长期以来,我总是使用Python np.asarray(标量)的输出是什么?,python,arrays,numpy,type-conversion,Python,Arrays,Numpy,Type Conversion,长期以来,我总是使用np.array、np.asarray和np.asanyarray将类似数组的列表转换为数组 但是,当将标量数组转换为numpy数组时,我知道np。至少\u 1d(123)产生了正确的结果,array([123]) 但是我对np.array和np.asarray i = 123 x = np.array(i, dtype=np.int) print x # array(123) print x.shape # () print x.size # 0 既然x.shape表示
np.array
、np.asarray
和np.asanyarray
将类似数组的列表转换为数组
但是,当将标量数组转换为numpy数组时,我知道np。至少\u 1d(123)
产生了正确的结果,array([123])
但是我对np.array
和np.asarray
i = 123
x = np.array(i, dtype=np.int)
print x # array(123)
print x.shape # ()
print x.size # 0
既然
x.shape
表示x
为空,那么数组(123)
是什么?它是一个0维数组,在其\uuuu str\uuuu
中仍然包含123
size=0的实空数组应该是数组([])
显然,它们是不同的,尽管它们的大小都是0
我认为0d
是nd
的自然延续。MATLAB将2d作为下限numpy
本可以使用1d
,但选择了0d
数组由数据缓冲区、值字节是否存储、数据类型(如何解释这些字节)和shape
(加上strips
)组成<代码>形状
是(显示为)元组。Python允许元组具有0、1、2或更多元素,那么为什么shape不应该具有相同的灵活性呢
看看至少能做些什么
res = []
for ary in arys:
ary = asanyarray(ary)
if len(ary.shape) == 0:
result = ary.reshape(1)
else:
result = ary
res.append(result)
if len(res) == 1:
return res[0]
else:
return res
它可以处理输入列表(标量、数组、列表等)
它会将每个对象转换为数组(根据需要),然后检查dim(形状的长度)。如果为0d,则会将其重塑为(1,)。此重塑不会更改数据缓冲区<代码>至少2d
执行result=ary。重塑(1,1)
您还可以ndmin
:
In [382]: np.array(1,ndmin=1)
Out[382]: array([1])
np.array(1)
在许多方面与np.int32(1)
类似。它们都有()
形状,都有类似sum()
的方法。唯一明显的区别在于它们的打印格式
我不知道有什么理由故意构造0d数组。如果我真的想要一个1d数组,那么编写np.array([1])
同样容易。但你应该知道如何处理一个,如果它出现。这包括使用.item()
提取标量值,以及使用[()]
索引
我经常在关于使用scipy.io.loadmat
加载MATLAB文件的问题中遇到它。一些MATLAB
构造作为0d对象数组返回
考虑0d数组的另一种方式是,它将整个数组方法添加(或保留)到标量中,而不必显式指定dtype
我提到了与
np.int32(1)
的相似性。我在初学者代码中见过它,但我自己并不需要它 x.shape
表示x的形状为空x
是一个标量,还有什么?@JulienBernu,print x
显示array(123)
,而不是array([]
),这是一个常规的空数组。投票被否决的人,请至少留下评论。这个问题不清楚,甚至你认为它太简单和愚蠢了x
不是标量,而是numpy.ndarray
。您混淆了“空”和“空形状”<代码>数组([])。形状=(0,)x
不是空的,它是一个标量,也是一个具有空形状的数组。这看起来是一个答案。但是现在我弄不明白为什么numpy
是这样设计的,将标量转换成看起来无用的东西。我从未见过这种空形状数组的任何应用。他们可能提出了一个异常,或者让它作为np.asanyarray
工作。
In [374]: np.atleast_1d(np.array(1),np.array([1]),np.array([[1]]))
Out[374]: [array([1]), array([1]), array([[1]])]
In [382]: np.array(1,ndmin=1)
Out[382]: array([1])