我想为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整数。
答案 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
就像它应该的那样,并最终将所有的责任归咎于< /强>