我有强度数据(SEM.txt(,我想通过将行重新分配给列来将图像旋转90度。Python 给了我一个"代码分析无效语法"错误,它说"for m:"——我做错了什么?
import numpy as np
import matplotlib.pyplot as plt
a=np.loadtxt("SEM.txt")
Intensity=np.loadtxt("SEM.txt")
Intensity[n,m]=Raw_Intensity
for m:
for n:
New_Intensity[m,n]=Raw_Intensity[n,m]
plt.imshow(New_Intensity)
你的 for 循环语法不正确。你需要类似的东西
for i in some_iterable:
#do some stuff with i or whatever
虽然我很确定你可以用这样的列表理解来替换这些循环
New_Intensity=[[x[1],x[0]] for x in Raw_Intensity]
假设这实际上是您要做的....
编辑
根据您上面关于需要使用 for 循环的评论,您可以这样做
New_Intensity=[]
for x in Raw_Intensity:
#we don't need to define x outside the for loop
New_Intensity.append([x[1],x[0]])
你正在做的是转置一个数组。 直接使用转置。 查看 numpy 转置
New_Intensity = np.transpose(Intensity)
这是我建议的演示
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print(a)
[[1 2 3]
[4 5 6]]
b = np.transpose(a)
print(b)
[[1 4]
[2 5]
[3 6]]
如果要手动执行此操作,则可以这样做。
# get the size of the matrix
size = a.shape()
# create the output of the correct size
c = np.zeros((size[1],size[0]))
# iterate over the range of row values
for m in range(size[0]):
# iterate over the range of column values
for n in range(size[1]):
c[n,m]=a[m,n]
print(c)
[[ 1. 4.]
[ 2. 5.]
[ 3. 6.]]
结果与仅使用numpy.transpose
相同,但键入更多。