Python numpy数组根据行为每列分配值

时间:2014-04-21 12:17:00

标签: python arrays numpy

我想为2D numpy数组中的每一行指定特定于行的值。特别是,每行应包含其行号倒数的值。换句话说,第1行中的所有列应具有值1,第2行中的所有列应为1/2,第3行中的所有列应为1/3,依此类推。 我试过这个:

m = 3
n = 10

train = np.empty([n,m], float)

for curr_n in range(n):
    train[curr_n,:] = 1/(curr_n+1)

print train

但输出是:

[[ 1.  1.  1.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]]

我做错了什么?我用过" float"在开始时,但除了第一行之外,我仍然得到所有的0整数。

2 个答案:

答案 0 :(得分:5)

Python 3中添加了隐式类型转换,因此您的原始代码将按原样运行:

from __future__ import division

m = 3
n = 10

train = np.empty([n,m], float)

for curr_n in range(n):
   train[curr_n,:] = 1/(curr_n+1)

print train

有关__future__模块的一些信息,请参阅官方文档future module

或者,正如sshashank124在他的回答中提出并放入评论时,您可以使用1.或1.0来强制浮动行为。

答案 1 :(得分:3)

您有一个简单的type问题。在您的回报中使用1.0代替1。以下作品:

m = 3
n = 10

train = np.empty([n,m])

for curr_n in range(n):
    train[curr_n,:] = 1.0/(curr_n+1)   #converted 1 to 1.0

print train

说明

虽然你可能认为numpy默认处理浮点数,但在这种情况下,在 python有时间计算反转之后,numpy数组会被赋值。然后,python将你的花车截断为一个int,而numpy无辜地将那个鬼鬼祟祟的int转换为float就像它应该的那样,并最终将所有的责任归咎于< /强>