我需要写和读复数。我想使用numpy.savetxt并numpy.loadtxt这样做。由于我编写的代码相当大,我创建了一个测试文件来尝试写入和读取复数。
到目前为止,我已经能够使用numpy.savetxt. 代码如下:
import numpy
d1 = -0.240921619563 - 0.0303165074169j
d2 = -0.340921619563 - 0.0403165074169j
d3 = -0.440921619563 - 0.0503165074169j
d4 = -0.540921619563 - 0.0603165074169j
array = numpy.array([d1, d2, d3, d4])
save = open("test.dat", "w")
numpy.savetxt(save, array.reshape(1, array.shape[0]), newline = "\r\n", fmt = "%.10f")
save.close()
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
(-0.2409216196+-0.0303165074j) (-0.3409216196+-0.0403165074j) (-0.4409216196+-0.0503165074j) (-0.5409216196+-0.0603165074j)
Run Code Online (Sandbox Code Playgroud)
我现在想要做的就是实际读取/加载数据。我的脚本是:
import numpy
d = numpy.loadtxt("test.dat")
Run Code Online (Sandbox Code Playgroud)
这段代码是不够的,我目前无法加载数据。我的问题与此类似。但是,通过手动替换+-a-我仍然无法加载数据。我觉得在这个解决方案是dtype为选项numpy.loadtxt。我一直无法弄清楚。
非常感谢您的帮助!
我有一个理论上用二次多项式描述的数据集.我想要适应这些数据,我已经习惯numpy.polyfit了.但是,缺点是返回系数的误差不可用.因此我决定使用适合的数据scipy.odr.奇怪的是,多项式的系数彼此偏离.
我不明白这一点,因此决定在我生成自己的一组数据上测试两个拟合例程:
import numpy
import scipy.odr
import matplotlib.pyplot as plt
x = numpy.arange(-20, 20, 0.1)
y = 1.8 * x**2 -2.1 * x + 0.6 + numpy.random.normal(scale = 100, size = len(x))
#Define function for scipy.odr
def fit_func(p, t):
return p[0] * t**2 + p[1] * t + p[2]
#Fit the data using numpy.polyfit
fit_np = numpy.polyfit(x, y, 2)
#Fit the data using scipy.odr
Model = scipy.odr.Model(fit_func)
Data = scipy.odr.RealData(x, y)
Odr = scipy.odr.ODR(Data, Model, [1.5, …Run Code Online (Sandbox Code Playgroud) 我想确定二维numpy数组的总和。但是,我要从此求和中排除具有特定值的元素。最有效的方法是什么?
例如,在这里我初始化一个numpy1的二维数组,并将其中几个替换为2:
import numpy
data_set = numpy.ones((10, 10))
data_set[4][4] = 2
data_set[5][5] = 2
data_set[6][6] = 2
Run Code Online (Sandbox Code Playgroud)
如何在排除所有2s的同时对二维数组中的元素求和?请注意,对于10 x 10数组,正确的答案应该是97,因为我将三个元素替换为值2。
我知道我可以使用嵌套的for循环来做到这一点。例如:
elements = []
for idx_x in range(data_set.shape[0]):
for idx_y in range(data_set.shape[1]):
if data_set[idx_x][idx_y] != 2:
elements.append(data_set[idx_x][idx_y])
data_set_sum = numpy.sum(elements)
Run Code Online (Sandbox Code Playgroud)
但是,根据我的实际数据(非常大),这太慢了。正确的做法是什么?
我想要做的是在给定角度上旋转2D numpy数组.我正在采用的方法是使用旋转矩阵.旋转矩阵我定义为:
angle = 65.
theta = (angle/180.) * numpy.pi
rotMatrix = numpy.array([[numpy.cos(theta), -numpy.sin(theta)],
[numpy.sin(theta), numpy.cos(theta)]])
Run Code Online (Sandbox Code Playgroud)
我要旋转的矩阵是成形的(1002,1004).然而,仅仅为了测试目的,我创建了一个形状为2D的数组(7,6)
c = numpy.array([[0,0,6,0,6,0], [0,0,0,8,7,0], [0,0,0,0,5,0], [0,0,0,3,4,0], [0,0,2,0,1,0], [0,8,0,0,9,0], [0,0,0,0,15,0]])
Run Code Online (Sandbox Code Playgroud)
现在,当我在我的2D数组上应用旋转矩阵时,我收到以下错误:
c = numpy.dot(rotMatrix, c)
print c
c = numpy.dot(rotMatrix, c)
ValueError: matrices are not aligned
Exception in thread Thread-1 (most likely raised during interpreter shutdown):
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?