我想了解为什么float和np.float64类型的联合会在这里产生[arg-type]键入错误,但单独使用类型就可以了:
import numpy as np
from numpy.typing import ArrayLike
from typing import Any, Union
def as_float_array(a: ArrayLike) -> Any:
...
w: float = float(4)
as_float_array([w])
x: np.float64 = np.float64(4)
as_float_array([x])
y: Union[float, np.float64] = float(4)
as_float_array([y])
z: Union[float, np.float64] = np.float64(4)
as_float_array([z])
Run Code Online (Sandbox Code Playgroud)
/.../scratch.py:17: error: Argument 1 to "as_float_array" has incompatible type "List[Union[float, floating[_64Bit]]]"; expected "Union[Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]], Union[Union[_SupportsArray[dtype[Any]], Sequence[_SupportsArray[dtype[Any]]], Sequence[Sequence[_SupportsArray[dtype[Any]]]], Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]], Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]]]], Union[bool, int, float, complex, str, bytes, Sequence[Union[bool, int, float, complex, str, bytes]], Sequence[Sequence[Union[bool, int, …Run Code Online (Sandbox Code Playgroud) 给定一个2d Numpy数组,我希望能够以最快的方式计算每一行的对角线,我现在正在使用列表理解,但我想知道它是否可以以某种方式进行矢量化?
例如,使用以下M数组:
M = np.random.rand(5, 3)
[[ 0.25891593 0.07299478 0.36586996]
[ 0.30851087 0.37131459 0.16274825]
[ 0.71061831 0.67718718 0.09562581]
[ 0.71588836 0.76772047 0.15476079]
[ 0.92985142 0.22263399 0.88027331]]
Run Code Online (Sandbox Code Playgroud)
我想计算以下数组:
np.array([np.diag(row) for row in M])
array([[[ 0.25891593, 0. , 0. ],
[ 0. , 0.07299478, 0. ],
[ 0. , 0. , 0.36586996]],
[[ 0.30851087, 0. , 0. ],
[ 0. , 0.37131459, 0. ],
[ 0. , 0. , 0.16274825]],
[[ 0.71061831, 0. , 0. ],
[ 0. , …Run Code Online (Sandbox Code Playgroud)