numpy 什么是“np.ndarray[Any,np.float64]”?为什么“np.typing.NDArray[np.float64]”会给它起别名?

hgtggwj0  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(164)

bounty将于明天到期。回答此问题可获得+50的声望奖励。Alexander Soare希望吸引更多人关注此问题。

np.typing.NDArraydocumentation说它是“np.ndarray[Any, np.dtype[+ScalarType]]的泛型版本“,“泛型”中的泛化发生在哪里?
numpy.ndarray.__class_getitem__documentation中,我们有一个np.ndarray[Any, np.dtype[Any]]的例子,没有解释这两个参数是什么。
为什么我可以做np.ndarray[float](只使用一个参数)?这是什么意思?

v8wbuo2f

v8wbuo2f1#

np.typing.NDArray可用于指定具有给定类型的数组,例如整数数组:

def return_numpy_int_array(a_variable: npt.ArrayLike) -> np.typing.NDArray[np.int_]:
    return np.array(a_variable)

如果f = [1, 10, 100],则return_numpy_int_array(f)返回array([ 1, 10, 100])
ndarray是类,它是泛型的,因为它是创建numpy数组的底层方法,作为泛型类型,它可以被参数化,就像list或dict一样;例如:

np.ndarray(shape=(3,), dtype=np.int32)

输出一个32位整数的列表(类似数组)数据类型对象:

[66912960        0        0]

因此np.ndarray[Any, np.dtype[+ScalarType]]意味着我们可以为dtype提供一组参数:

dtype_ = np.dtype([('name', np.unicode_, 8), ('size', np.float64, (2,))])

其输出:

[('name', '<U8'), ('size', '<f8', (2,))]

其类型为<class 'numpy.dtype[void]'>
我们可以通过dtype_从ndarray创建一个numpy数组b

b = np.ndarray(shape=(2,), dtype=dtype_)

其输出:

[('', [0., 0.]) ('', [0., 0.])]

其中可以使用ScalarType

np.ndarray(shape=(2,), dtype=dtype_[0])

输出:

['' '']

它可以是给定值:

b['size'] = 2.35

输出:

[('', [2.35, 2.35]) ('', [2.35, 2.35])]

因为我们指定了一个dtype,那么b['size'] = "dasbff"会引发一个错误:

ValueError: could not convert string to float: 'dasbff'

相关问题