小编DSt*_*man的帖子

Python,numpy; 如何最好地处理可能的0d数组

Python numpy ndarrays让我失望!我可以回到Matlab吗?

假设我有一个期望ndarray矢量输入的函数.我使用numpy.asarray函数强制输入到我想要的形式,方便的是没有重复已经是ndarrays的东西.但是,如果标量被传入,它有时会变成0d数组而不是1d数组,具体取决于它是如何传入的.0d数组会导致问题,因为我可以索引它.

首先,为什么我不能?说x = np.array(1).那么x.size == 1,它应该有第0个元素.为什么我不能做x[0]x[-1].我认为它想要 python int,但它应该在int上进行改进,而不是故意给出相同的限制.

其次,如果numpy asarray函数有一些可选输入来强制输出始终至少为1d数组,那将是非常棒的.然后我可以做类似的事情x = np.asarray(x, force_at_least_1d=True).

但是,我能想出的最佳选择是检查ndim属性,如果它是0,则将其扩展为1.这对我来说感觉不对.我还缺少一些其他选择吗?

import numpy as np

def func(x, extra_check=True):
    r"""Meaningless Example Function for stackoverflow."""
    # force input to be ndarrays
    x = np.asarray(x)

    if x.size == 0:
        print('Don''t do anything.')

    # Extra test to deal with garbage 0D arrays so that they can be indexed by keep.
    # This test is really bothering me. …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

8
推荐指数
2
解决办法
5492
查看次数

确定 numpy 数组是否为 datetime64 的最佳方法?

给定一个 numpy 数组,我想测试它是 datetime64 还是普通的数值数组。我在一些接受这两个选项的绘图函数中使用它,但是我不能对 datetime64 执行 a np.isnanor操作np.isinf,也不能np.isnat对数值数组执行 a 操作,所以我需要知道哪个是哪个。

问题是,根据原始数组的创建方式,我得到了不同的答案。

>>> import datetime
>>> import numpy as np

>>> x = np.datetime64('now', 'us')
>>> y = np.array([datetime.datetime.now()], dtype='datetime64[us]')

>>> isinstance(x, np.datetime64)
True
>>> isinstance(y, np.datetime64)
False
Run Code Online (Sandbox Code Playgroud)

到目前为止我想出的最好的办法是:

>>> str(x.dtype).startswith('datetime64')
True
>>> str(y.dtype).startswith('datetime64')
True
Run Code Online (Sandbox Code Playgroud)

这是最好的选择,还是有更好的方法?

python arrays numpy

3
推荐指数
1
解决办法
3964
查看次数

标签 统计

arrays ×2

numpy ×2

python ×2