我正在填充两个数组,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)中,任何这些参数的更改都会影响已经开始或正在排队的运行吗?