我试图在一个numpy ndarray中插入一个numpy浮点数。 代码和输出是:
dos = np.sum(atom[:, :, 1:],axis=0)
print("type(dos)")
print(type(dos))
print("dos.shape")
print(dos.shape)
print("dos[15] Before")
print(dos[15])
print("type(atom[1,0,0])")
print(type(atom[1,0,0]))
print("atom[1,0,0]")
print(atom[1,0,0])
for i in range(301):
dos2=np.insert(dos, 0, atom[1,0,0])
print("dos[15] After ")
print(dos2[15])
print("type(dos2)")
print(type(dos2))
,相应的输出是:
type(dos)
<class 'numpy.ndarray'>
dos.shape
(301, 18)
dos[15] Before
[ -9.75080030e-02 -8.37110240e-02 -3.13760517e-03 -2.70089494e-03
-2.07915835e-03 -1.77532740e-03 -2.03548911e-03 -1.73346437e-03
-1.98000973e-04 -1.64015415e-04 -1.99115166e-04 -1.65569761e-04
-9.07381374e-05 -7.37546825e-05 -1.48250176e-04 -1.22108731e-04
-1.18854648e-04 -9.70416840e-05]
type(atom[1,0,0])
<class 'numpy.float64'>
atom[1,0,0]
-4.11
dos[15] After
0.0
type(dos2)
<class 'numpy.ndarray'>
预期结果为:
[ -4.11 -9.75080030e-02 -8.37110240e-02 -3.13760517e-03 -2.70089494e-03
-2.07915835e-03 -1.77532740e-03 -2.03548911e-03 -1.73346437e-03
-1.98000973e-04 -1.64015415e-04 -1.99115166e-04 -1.65569761e-04
-9.07381374e-05 -7.37546825e-05 -1.48250176e-04 -1.22108731e-04
-1.18854648e-04 -9.70416840e-05]
来自numpy documentation,我无法看到我哪里出错了。 请帮助。
答案 0 :(得分:2)
从提到的文件:
已插入值的arr副本。请注意,插入不会就地发生:返回一个新数组。如果axis为None,则out为展平数组。
这意味着你的循环:
for i in range(301):
dos2=np.insert(dos, 0, atom[1,0,0])
300
无效操作,然后插入单个值,dos2
包含301*18
dos
值加一个值(展平):
>>> dos = np.random.random((3, 3))
>>> dos2 = np.insert(dos, 0, 12)
>>> dos2
array([ 12. , 0.30211688, 0.39685661, 0.89568364,
0.14398144, 0.39122099, 0.8017827 , 0.35158563,
0.18771122, 0.89938571])
>>> dos2[5]
0.39122099250162556
你可能想要的是在dos中为每个元素发生这个值:
>>> dos2 = np.empty((dos.shape[0], dos.shape[1] + 1), dtype=dos.dtype)
>>> for i in range(dos.shape[0]):
... dos2[i] = np.insert(dos[i], 0, 12)
...
>>> dos2
array([[ 12. , 0.30211688, 0.39685661, 0.89568364],
[ 12. , 0.14398144, 0.39122099, 0.8017827 ],
[ 12. , 0.35158563, 0.18771122, 0.89938571]])
这也可以简单地表达为:
>>> dos2 = np.empty((dos.shape[0], dos.shape[1] + 1), dtype=dos.dtype)
>>> dos2[:, 0] = 12
>>> dos2[:, 1:] = dos
答案 1 :(得分:1)
根据您的预期结果&#39;看起来你只想在已经平坦的数组的开头插入一个值。绝对没有必要使用for循环来做到这一点。
>>> insert_value = 100
>>> orig_array = np.array([1, 2, 3, 4, 5])
>>> final_array = np.insert(orig_array, 0, insert_value)
>>> print(final_array)
[100 1 2 3 4 5]