小编Tao*_*ozi的帖子

一个python函数,它接受标量或numpy数组作为参数

正如标题所说,假设我想写一个符号函数(让我们暂时忘记符号(0)),显然我们期望sign(2)= 1和sign(array([ - 2,-2,2]))=阵列([ - 1,-1,1]).但是,以下函数不起作用,因为它无法处理numpy数组.

def sign(x):
    if x>0: return 1
    else: return -1
Run Code Online (Sandbox Code Playgroud)

下一个函数将无法工作,因为x只有一个形状成员,如果它只是一个数字.即使使用y = x*0 + 1这样的技巧,y也不会有[]方法.

def sign(x):
    y = ones(x.shape)
    y[x<0] = -1
    return y
Run Code Online (Sandbox Code Playgroud)

即使有另一个问题的想法(如何创建接受numpy数组,可迭代或标量的numpy函数?),当x是单个数字时,下一个函数将不起作用,因为在这种情况下x.shape和y.shape只是()和索引y是非法的.

def sign(x):
    x = asarray(x)
    y = ones(x.shape)
    y[x<0] = -1
    return y
Run Code Online (Sandbox Code Playgroud)

唯一的解决方案似乎是首先确定x是数组还是数字,但我想知道是否有更好的东西.如果你有很多像这样的小函数,编写分支代码会很麻烦.

python arrays numpy function

10
推荐指数
1
解决办法
4878
查看次数

为什么Numpy只有维度(n,)而不是(n,1)

一段时间以来,我一直很好奇.我可以忍受这种情况,但是如果不采取足够的照顾,它总会咬我,所以我决定将它发布在这里.假设以下示例(Numpy版本= 1.8.2):

a = array([[0, 1], [2, 3]])
print shape(a[0:0, :]) # (0, 2)
print shape(a[0:1, :]) # (1, 2)
print shape(a[0:2, :]) # (2, 2)
print shape(a[0:100, :]) # (2, 2)

print shape(a[0]) # (2, )
print shape(a[0, :]) # (2, )
print shape(a[:, 0]) # (2, )
Run Code Online (Sandbox Code Playgroud)

我不知道其他人的感受,但结果与我不一致.最后一行是列向量,而倒数第二行是行向量,它们应该具有不同的维度 - 在线性代数中它们可以做到!(第5行是另一个惊喜,但我暂时忽略它).考虑第二个例子:

solution = scipy.sparse.linalg.dsolve.linsolve.spsolve(A, b) # solution of dimension (n, )
analytic = reshape(f(x, y), (n, 1)) # analytic of dimension (n, 1)
error = solution - analytic
Run Code Online (Sandbox Code Playgroud)

现在错误是维度(n,n).是的,在第二行我应该使用(n,)而不是(n,1),但为什么呢?我以前经常使用MATLAB,其中一维向量具有维度(n,1),linspace/arange返回维度(n,1)的数组,并且从不存在(n,).但是在Numpy(n,1)和(n,)共存时,维度处理有很多功能:至少,newaxis和reshape的不同用途,但对我来说,这些功能更多的是混乱而不是帮助.如果数组打印如[1,2,3],那么直观地说维度应该是[1,3]而不是[3,],对吗?如果Numpy没有(n,),我只能看到清晰度的增益,而不是功能上的损失. …

python arrays numpy

5
推荐指数
1
解决办法
2860
查看次数

标签 统计

arrays ×2

numpy ×2

python ×2

function ×1