Python 3.6:旋转矩阵



我有强度数据(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相同,但键入更多。

最新更新