我正在填充两个数组,field_in_k_space_REAL并且field_in_k_space_IMAGINARY,使用从高斯分布中提取的值,在我对数组进行逆变换时,注意尊重对称性以获得真实场.这是代码:
field_in_k_space_REAL = zeros(n, float)
field_in_k_space_IMAGINARY = zeros(n, float)
field_in_k_space_REAL[0] = 0.0
for i in range(1, int(n/2+1)):
field_in_k_space_REAL[i] = np.random.normal(mu, math.sqrt((1/2)*math.exp(-(2*math.pi*i*sigma/L)*(2*math.pi*i*sigma/L))))
x = range(int(n/2+1), int(n))
y = range(1, int(n/2))
zipped = zip(x, y)
for j, j2 in zipped:
field_in_k_space_REAL[j] = field_in_k_space_REAL[j-2*j2]
field_in_k_space_IMAGINARY[0] = 0.0
for i in range(1, int(n/2)):
field_in_k_space_IMAGINARY[i] = np.random.normal(mu, math.sqrt((1/2)*math.exp(-(2*math.pi*i*sigma/L)*(2*math.pi*i*sigma/L))))
field_in_k_space_IMAGINARY[n/2] = 0.0
for j, j2 in zipped:
field_in_k_space_IMAGINARY[j] = - field_in_k_space_IMAGINARY[j-2*j2]
print 'field_k', field_in_k_space_REAL
Run Code Online (Sandbox Code Playgroud)
但我一直有以下错误:
field_in_k_space_REAL[0] = 0.0
IndexError: index 0 is …Run Code Online (Sandbox Code Playgroud) 这些是我需要在列表列表中执行的逻辑步骤
a = [[5,2],[7,4],[0,3]]
Run Code Online (Sandbox Code Playgroud)
以这样的方式对列表列表进行排序,使输出看起来像
7,5,4,3,2,0
Run Code Online (Sandbox Code Playgroud)获取原始列表中已排序元素的坐标,在这种情况下应该生成输出
(1,0)
(0,0)
(1,1)
(2,1)
(0,1)
(2,0)
Run Code Online (Sandbox Code Playgroud)我尝试使用sort, sorted和argwhere以不同的方式,但我没有得到明智的结果,我想首先是因为sort并且sorted可以一次只跟踪一个轴排序列表
我有一个对称矩阵.现在,问题在于我需要填充这样的维度矩阵(32**3) x (32**3).我需要填充矩阵的原因是因为在我的程序中我使用它进行各种计算:我正在反转它,我将它与其他矩阵相乘......在我看来,为了执行这些各种你需要实际存储完整矩阵的计算,你不能使用例如只有一半(但我可能是错的,在这种情况下请告诉我应该怎么做).
问题是这样的矩阵对于我的计算机来说太大了,我得到以下错误:
Traceback (most recent call last):
File "program.py", line 191, in <module>
A = zeros((n_x*n_y*n_z. n_x*n_y*n_z), float)
MemoryError
Run Code Online (Sandbox Code Playgroud)
在这里,n_x = 32.那么,我该如何解决这个问题呢?有没有办法存储这么大的矩阵,或者是一种避免存储它的聪明方法?如果我可以使用它们而不会在计算中出错,那么这两种方式对我来说都没问题.
为了完整起见,我在下面报告A矩阵的构建方式:
n_x = n_y = n_z = 32
L_x = L_y = L_z = n_x
A = zeros((n_x*n_y*n_z , n_x*n_y*n_z), float)
P_0 = 50.0
sigma_x = sigma_y = sigma_z = 0.9
sigma_root = np.sqrt(sigma_x**2 + sigma_y**2 + sigma_z**2)
twosigmasquared = 2.*sigma_root**2
for l in range(n_x*n_y*n_z):
for m in range(n_x*n_y*n_z):
A[l][m] …Run Code Online (Sandbox Code Playgroud) python symmetric matrix-inverse bigdata matrix-multiplication
我是 Python 初学者。
我有一个 X 值列表
x_list = [-1,2,10,3]
Run Code Online (Sandbox Code Playgroud)
我有一个 Y 值列表
y_list = [3,-3,4,7]
Run Code Online (Sandbox Code Playgroud)
然后我为每对夫妇设置一个 Z 值。从原理上讲,这是这样工作的:
X Y Z
-1 3 5
2 -3 1
10 4 2.5
3 7 4.5
Run Code Online (Sandbox Code Playgroud)
并且 Z 值存储在z_list = [5,1,2.5,4.5]. 我需要得到一个二维图,X 轴上的 X 值,Y 轴上的 Y 值,以及每对 Z 值,由强度图表示。这是我尝试过的,未成功:
X, Y = np.meshgrid(x_list, y_list)
fig, ax = plt.subplots()
extent = [x_list.min(), x_list.max(), y_list.min(), y_list.max()]
im=plt.imshow(z_list, extent=extent, aspect = 'auto')
plt.colorbar(im)
plt.show()
Run Code Online (Sandbox Code Playgroud)
如何正确完成此操作?
我编写了一个 Python 脚本,它生成一个输出到一个文件。Mathematica 将其读取为输入文件,然后使用它进行一些操作,最后返回另一个输出文件。反过来,最后一个文件应该由相同的初始 Python 脚本读取,以执行更多操作。
我的问题是:最简单(但有效)的方法是什么?
我将在下面写一个(非常简单的)我正在处理的例子。我从我的 python 脚本开始python_script.py:这会生成一个arr保存在文件中的数组"arr.txt"
import numpy as np
arr = np.arange(9).reshape(3,3)
np.savetxt('arr.txt', arr, delimiter=' ')
Run Code Online (Sandbox Code Playgroud)
该文件由我的 Mathematica 笔记本读取nb_Mathematica.nb。例如,这可以生成另一个数组,然后保存在另一个文件中,"arr2.txt"
file = Import["arr.txt","Table"]
b = ArrayReshape[file, {3,3}]
c = {{1,1,1},{1,1,1},{1,1,1}}
d = b + c
Export["arr2.txt", d]
Run Code Online (Sandbox Code Playgroud)
现在"arr2.txt"必须通过原始Python脚本来读取。怎么可能做到这一点?具体来说,如何停止 Python 脚本,启动 Mathematica,然后返回到 Python 脚本?
下面的代码显示了矩阵的奇点问题,因为我在Pycharm中工作了
raise LinAlgError("Singular matrix")
numpy.linalg.linalg.LinAlgError: Singular matrix
Run Code Online (Sandbox Code Playgroud)
我想问题是K但我无法理解究竟是怎么回事:
from numpy import zeros
from numpy.linalg import linalg
import math
def getA(kappa):
matrix = zeros((n, n), float)
for i in range(n):
for j in range(n):
matrix[i][j] = 2*math.cos((2*math.pi/n)*(abs(j-i))*kappa)
return matrix
def getF(csi, a):
csiInv = linalg.inv(csi)
valueF = csiInv * a * csiInv * a
traceF = valueF.trace()
return 0.5 * traceF
def getG(csi, f, a):
csiInv = linalg.inv(csi)
valueG = (csiInv * a * csiInv) / (2 * f)
return valueG …Run Code Online (Sandbox Code Playgroud) 假设我有以下数组:
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])
Run Code Online (Sandbox Code Playgroud)
我使用ravel()它的标准。这就是我得到的:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26])
Run Code Online (Sandbox Code Playgroud)
相反,我需要以不同的顺序进行解释,即:
0 9 18 1 10 19 2 11 20 3 12 21 4 13 22 5 …Run Code Online (Sandbox Code Playgroud) 我有一个脚本,job.bin用于在acluster pythoncode.py上的ptyhon()中执行代码,并通过提交作业qsub。在job.bin:
cd /path/to/my/python/code
python pythoncode.py
Run Code Online (Sandbox Code Playgroud)
会发生什么,如果:
a)在pythoncode.py运行时,我更改其内容
b)pythoncode.py在排队时,我更改其内容
pythoncode.py包含一些我可以改变的参数。在情况a)和b)中,任何这些参数的更改都会影响已经开始或正在排队的运行吗?