python ndim函数_使用ndim对ndarray进行Python-numpy测试

鉴于对@larsmans回答的评论,您可以尝试:

if not isinstance(S, np.ndarray):

raise TypeError("Input not a ndarray")

if S.ndim == 0:

S = np.reshape(S, (1,1))

(p, p2) = S.shape

首先,明确检查S是否是ndarray的(子类).然后,如果需要,可以使用np.reshape复制数据(当然还要重新整形).最后,你得到了维度.

请注意,在大多数情况下,np函数将首先尝试访问ndarray的相应方法,然后尝试将输入转换为ndarray(有时将其保留为子类,如np.asanyarray,有时不会(如np中). asarray(…)).换句话说,使用方法而不是函数总是更有效:这就是我们使用S.shape而不是np.shape(S)的原因.

另一点:np.asarray,np.asanyarray,np.atleast_1D ……都是更通用的函数np.array的特例.例如,asarray将数组的可选复制参数设置为False,asanyarray设置相同并设置subok = True,atleast_1D设置ndmin = 1,atleast_2d设置ndmin = 2 …换句话说,使用np.array总是更容易用适当的论据.但正如一些评论中提到的那样,这是一种风格问题.快捷方式通常可以提高可读性,这始终是一个需要牢记的目标.

在任何情况下,当你使用np.array(…,copy = True)时,你明确地要求提供初始数据的副本,有点像做一个列表([….]).即使没有其他更改,您的数据也将被复制.这具有其缺点的优点(正如我们在法语中所说的那样),例如,您可以将行从第一行C更改为第一列F.但无论如何,您可以获得所需的副本.

使用np.array(input,copy = False),始终会创建一个新数组.如果后者已经是ndarray(也就是说,不浪费内存),它将指向同一块内存作为输入,或者如果输入不是,则将“从头开始”创建一个新内存块.有趣的情况当然是输入是一个ndarray.

在函数中使用此新数组可能会也可能不会更改原始输入,具体取决于函数.您必须检查要使用的函数的文档,以查看它是否返回副本. NumPy开发人员努力限制不必要的副本(遵循Python示例),但有时无法避免.文档应该明确说明发生了什么,如果没有或者不清楚,请提及.

如果出现问题,np.array(…)可能会引发一些异常.例如,尝试使用带有[“STRING”,1]之类的输入的dtype = float将引发ValueError.但是,我必须承认我不记得在所有情况下哪些例外,请相应地编辑这篇文章.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值