Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 np.asarray(标量)的输出是什么?_Python_Arrays_Numpy_Type Conversion - Fatal编程技术网

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])