我想从python中的数组中减去一个数字,但我想保留原始数组。
这是我的代码:
for X0 in [X0 * 0.01 for X0 in range(-2,2)]:
for Y0 in [Y0 * 0.01 for Y0 in range(6,10)]:
RAm = RA
Decm = Dec
RAm[:] = [x - X0 for x in RAm]
Decm[:] = [x - Y0 for x in Decm]
RAs = np.sum(RAm)
Decs = np.sum(Decm)
#a = np.sqrt(((RAs**2*Decs**2)**2 - RAs**4*Decs**4)/(RAs**2*Decs**2*Decs**2 -Decs**2*RAs**4))
#b = np.sqrt(((RAs**2*Decs**2)**2 - RAs**4*Decs**4)/(RAs**2*Decs**2*RAs**2 - RAs**2*Decs**4))
print RA
print RAm
这让我觉得RA正在改变,即使它应该保持不变,因为我想从每个循环中减去RA中不同的数字。我该如何解决这个问题?
答案 0 :(得分:2)
如果您正在使用NumPy,您可以利用它同时支持对所有元素进行操作的事实。
RAm = np.array(RA) - X0
Decm = np.array(Dec) - Y0
或者甚至跳过这些作业,如果你没有使用除了总和以外的任何结果:
RAs = np.sum(np.array(RA) - X0)
Decs = np.sum(np.array(Dec) - Y0)
我的印象是你是一名(Python)初学者,所以也许坚持使用基本的Python,直到你对此感到满意为止。当然,所有这些都可以在没有NumPy的情况下完成:
RAs = sum(x - X0 for x in RA)
Decs = sum(y - Y0 for y in Dec)
但是,如果您确实想使用NumPy,请正确使用它。这意味着:使用矩阵计算而不是循环。例如,您可以执行类似*的操作,以获取array
,其中包含不同Y0
值的总和:
Y0_values = np.array([Y0 * 0.01 for Y0 in range(6,10)])
y_matrix = np.tile(RA, [len(Y0_values), 1])
Y0_matrix = np.tile(Y0_values[np.newaxis].T, [1, len(RA)])
sums = np.sum(y_matrix - Y0_matrix, axis=1)
*仅用于演示目的。我离NumPy专家很远,所以可能有更好的方法来做到这一点。出于同样的原因,我不会解释它是如何工作的;为了您的利益,我只是鼓励您了解更多有关NumPy的信息。
答案 1 :(得分:1)
而不是通过列表进行迭代,并对其进行更改,请执行以下操作:
for element in list(your_list_here):
if element.something():
your_list_here.remove(element)
另外..赋值Ram=Ra
表示对象上的每个方法调用,实际上都指向同一个对象。如果您想要安全,请使用Ram = list(Ra)
。
答案 2 :(得分:1)
RAm = RA
使RAm
成为RA
的别名; RAm[:] = ...
修改了列表。
相反,只需
RAm = [x - X0 for x in RA]