我有个简单的问题。我看过的大量教程都显示了除了这种常见情况之外的所有内容。我想做一个逐元素向量乘,其中一个向量是矩阵的一个切片。你知道吗
我不能用shell交互地复制这个问题,所以我不理解它。下面是说明问题的部分代码。你知道吗
Ordr = 2 # these values set higher up in the code
nx = 5
dx = np.empty((Ordr-1,nx),dtype=float)
# vector dpx and dx calculated in other code here
print('shapes dpx,dx',dpx.shape,dx.shape)
ap.arrayprint('root calc:',dpx,np.transpose(dx)) # not shown originally
dtmp = dpx*dx[0,:]
print('shape dtmp',dtmp.shape)
results are:
shapes dpx,dx (5,) (1, 5)
shape dtmp (5,5)
我希望dtmp是形状(5,) 虽然我还没有检查实际的数字,但似乎正在计算一个外积。如果我颠倒顺序,也就是dpx[0,:]*dx,没有什么区别 正如我所说,我还不能在shell中复制这个问题,所以我想知道是什么给了我答案。我在Cygwin上运行3.6.8版本。在Windows 3.7.3rc1版本下也会出现相同的结果。你知道吗
2019年7月18日新增加的职位:
进一步检查发现,调用函数进行表格打印是导致问题的原因。该函数将向量作为列与二维数组一起打印。这是通过如下方式重塑向量来实现的:
a.shape = (n,1)
在函数调用之后,这个重塑被传递回调用例程。因为dp是(5,1),所以乘法是(5,1)矩阵乘以(5,1)向量。广播被调用,结果是(5,5)。你知道吗
我是一个新的python程序员,我(错误地)认为对输入的这种修改不会传递回调用者。以这种方式修改函数输入是错误的吗?是否应该在函数中将其标记为错误?我理解C传递值和Fortran传递引用,但不理解Python如何将参数传递给函数。有人能给我解释一下在Python中调用约定吗?你知道吗
根据这一发现,这篇文章的标题是完全错误的。我现在的问题是-为什么Python允许我更改函数的输入?是否值得以不同的标题发布?你知道吗
尝试重新创建您的示例:
关于你的新信息。你知道吗
此操作更改
a
本身的形状,其中asnp.reshape(a, (n,1))
或a.reshape(n1,1)
使用新形状创建新数组(但通常是view
,共享数据缓冲区)。你知道吗传递给函数时:
A
和B
都通过引用传递给foo
。也就是说,外部名称空间中A
引用的对象被内部名称空间中的a
引用。a.shape
会就地更改该对象,然后此更改会出现在A
引用的同一对象中。你知道吗但是
B
没有改变。b
获取新的对象分配,并成为local
。B
和b
之间的链接断开。你知道吗一般来说,Python不会自动复制对象,至少不会简单地将对象传递给函数(或传递回函数)。你必须自己制作它们,或者使用生成新对象的函数。你知道吗
我不确定术语是否正确,但这个答案符合我的理解:
https://stackoverflow.com/a/33066581/901925
相关问题 更多 >
编程相关推荐