我想用NumPy在特定位置存储多个力量。
我需要一个位置为positions
的向量和一个位于某些位置的力forces
的向量。我提示用户使用input("Please input position: ")
和input("Please input force: ")
输入这些位置和力量。
如何使用NumPy将这些输入的值附加到两个单独的向量中?我试过了
import numpy as np
# empty as default
positions = None
forces = None
# append
np.append(positions, int(input("Please input position: ")))
np.append(forces, int(input("Please input position: ")))
# print positions and forces
print(positions)
print(forces)
但变量positions
和forces
保持为空。
答案 0 :(得分:1)
这里有三个问题。
首先,None
不是一个数组,因此附加它没有任何意义。 (NumPy实际上会让你这样做,但它会将其视为array([None], dtype=object)
,这几乎肯定不是你想要的。)
其次,append
不会就地修改其数组参数,它会返回一个新数组。 * 正如文档所说:
arr 的副本,值附加到轴。请注意,
append
不会就地发生:分配并填充新数组。
另外,你真的应该在创建数组时设置dtype;否则,你将获得默认的float64
,并且NumPy将浪费地将所有漂亮的整数转换为浮点数。
所以,做你想做的事:
positions = np.array([], dtype=int)
forces = np.array([], dtype=int)
# append
positions = np.append(positions, int(input("Please input position: ")))
forces = np.append(forces, int(input("Please input position: ")))
# print positions and forces
print(positions)
print(forces)
第三,NumPy数组不是一次只能生成一个元素。这个问题不会导致你的错误 - 对于这么小的数组(大小为(1,)
),它甚至不会有明显的效果 - 但这是一个非常糟糕的习惯。许多其他类型,如Python的内置列表,对此有好处,但不适用于NumPy数组。
通常你要事先知道你将拥有多少个值,在这种情况下你可以预先分配数组。如果没有,您通常是从动态构建的某种迭代构建它,如list
。 ** 以下是一些示例:
# Pre-allocating the array
positions = np.zeros((1,), dtype=int)
positions[0] = int(input("Please input position: "))
# Building the array from a dynamically-built list
positions = []
positions.append(int(input("Please input position: ")))
positions = np.array(positions, dtype=int)
# Building the array all at once from a static list
positions = np.array([int(input("Please input position: "))], dtype=int)
*如果 尝试就地修改内容,第一个问题会更糟,因为那时你会尝试修改不可变的单例值{{1} } ... 子>
**对于非常大的数组,请不要使用None
,因为构建临时list
的成本太高。相反,您经常需要创建生成器或其他类型的惰性迭代器,并使用list
。
答案 1 :(得分:0)
就像这样:
positions = np.array(())
positions=np.append(positions, int(input("Please input position: ")))