Tôi đang cố gắng vẽ một bề mặt 3d trong đó mỗi chiều trong số ba chiều trong một mảng giá trị riêng biệt và màu của bề mặt tại mỗi tọa độ là một hàm của x, y, z. Một loại numpy. pcolormesh nhưng ở dạng 4D, thay vì 3D. Cốt truyện 3D được đưa ra bởi
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
fig = plt.figure[]
ax = fig.gca[projection='3d']
x = np.logspace[-1.,np.log10[5],50]
y = np.linspace[6,9,50]
z = np.linspace[-1,1,50]
colors = LikeBeta[y,range[50],range[50]]
ax.plot_trisurf[x,y,z,cmap=colors,linewidth=0.2]
ở đâu
def LikeBeta[rho0,r0,beta]:
M0 = 10**rho0*r0_array[r0]**3
I = cst*M0*sigma_los_beta[beta,:,r0]
S = dv**2+I
res = [np.log[S] + [v-u]**2/S].sum[]
return res/2.
Có thể là
----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4 I = cst*M0*sigma_los_beta[beta,:,r0]
ValueError: operands could not be broadcast together with shapes [50,] [50,353]
2 sai, nhưng vấn đề nằm ở chỗ khác. Tôi nhận được lỗi sau đây----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4 I = cst*M0*sigma_los_beta[beta,:,r0]
ValueError: operands could not be broadcast together with shapes [50,] [50,353]
Thật vậy,
----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4 I = cst*M0*sigma_los_beta[beta,:,r0]
ValueError: operands could not be broadcast together with shapes [50,] [50,353]
3 là một mảng tôi đánh giá riêng và có hình dạng ----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4 I = cst*M0*sigma_los_beta[beta,:,r0]
ValueError: operands could not be broadcast together with shapes [50,] [50,353]
4 và 353 đó là dữ liệu mà tôi phải cóLàm cách nào tôi có thể chuyển chức năng này thành một biểu mẫu tương thích với các mục nhập khác của
----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4 I = cst*M0*sigma_los_beta[beta,:,r0]
ValueError: operands could not be broadcast together with shapes [50,] [50,353]
5?Xin lỗi, nhưng tôi không thể cung cấp mã làm việc tối thiểu, vì dv,v và u là dữ liệu. Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn. Chúc mừng
Câu trả lời này giải quyết vấn đề về sơ đồ bề mặt 4d. Nó sử dụng chức năng
----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4 I = cst*M0*sigma_los_beta[beta,:,r0]
ValueError: operands could not be broadcast together with shapes [50,] [50,353]
6 của matplotlib thay vì ----> 8 colors = LikeBeta[y,range[50],range[50]]
----> 4 I = cst*M0*sigma_los_beta[beta,:,r0]
ValueError: operands could not be broadcast together with shapes [50,] [50,353]
5Về cơ bản, bạn muốn định hình lại các biến x, y và z của mình thành các mảng 2d có cùng kích thước. Để thêm thứ nguyên thứ tư dưới dạng bản đồ màu, bạn phải cung cấp một mảng 2d khác có cùng thứ nguyên với các biến trục của bạn
Dưới đây là mã ví dụ cho một ô 3d với bản đồ màu tương ứng với các giá trị x. Đối số
def LikeBeta[rho0,r0,beta]:
M0 = 10**rho0*r0_array[r0]**3
I = cst*M0*sigma_los_beta[beta,:,r0]
S = dv**2+I
res = [np.log[S] + [v-u]**2/S].sum[]
return res/2.
0 được sử dụng để thay đổi bản đồ màu theo ý thích của bạn. Lưu ý rằng giá trị của nó được lấy từ hàm def LikeBeta[rho0,r0,beta]:
M0 = 10**rho0*r0_array[r0]**3
I = cst*M0*sigma_los_beta[beta,:,r0]
S = dv**2+I
res = [np.log[S] + [v-u]**2/S].sum[]
return res/2.
1 trong lớp def LikeBeta[rho0,r0,beta]:
M0 = 10**rho0*r0_array[r0]**3
I = cst*M0*sigma_los_beta[beta,:,r0]
S = dv**2+I
res = [np.log[S] + [v-u]**2/S].sum[]
return res/2.
2import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# domains
x = np.logspace[-1.,np.log10[5],50] # [0.1, 5]
y = np.linspace[6,9,50] # [6, 9]
z = np.linspace[-1,1,50] # [-1, 1]
# convert to 2d matrices
Z = np.outer[z.T, z] # 50x50
X, Y = np.meshgrid[x, y] # 50x50
# fourth dimention - colormap
# create colormap according to x-value [can use any 50x50 array]
color_dimension = X # change to desired fourth dimension
minn, maxx = color_dimension.min[], color_dimension.max[]
norm = matplotlib.colors.Normalize[minn, maxx]
m = plt.cm.ScalarMappable[norm=norm, cmap='jet']
m.set_array[[]]
fcolors = m.to_rgba[color_dimension]
# plot
fig = plt.figure[]
ax = fig.gca[projection='3d']
ax.plot_surface[X,Y,Z, rstride=1, cstride=1, facecolors=fcolors, vmin=minn, vmax=maxx, shade=False]
ax.set_xlabel['x']
ax.set_ylabel['y']
ax.set_zlabel['z']
fig.canvas.show[]
rsn = datasets.fetch_atlas_smith_2009[]['rsn10'] rsn
Datasets are stored in: ['/home/yasmin/nilearn_data']0
Nó là một tập tin nifti 4D. Chúng tôi tải nó vào bộ nhớ để in hình dạng của nó
Datasets are stored in: ['/home/yasmin/nilearn_data']1
Datasets are stored in: ['/home/yasmin/nilearn_data']2
Chúng tôi có thể truy xuất tập đầu tiên [lưu ý rằng việc lập chỉ mục Python bắt đầu từ 0]
Datasets are stored in: ['/home/yasmin/nilearn_data']3
Datasets are stored in: ['/home/yasmin/nilearn_data']4
first_rsn là hình ảnh 3D
Sau đó chúng ta có thể vẽ nó
Datasets are stored in: ['/home/yasmin/nilearn_data']5
Datasets are stored in: ['/home/yasmin/nilearn_data']6
Lặp lại trên tất cả các ổ đĩa trong tệp 4D#
Nếu chúng ta muốn vẽ tất cả các ổ đĩa trong tệp 4D này, chúng ta có thể sử dụng iter_img để lặp lại chúng
Sau đó, chúng tôi đưa ra một vài đối số cho plot_stat_map để có một màn hình nhỏ gọn hơn
Datasets are stored in: ['/home/yasmin/nilearn_data']7
Lặp qua các ổ đã chọn trong tệp 4D#
Nếu chúng ta muốn vẽ các khối đã chọn trong tệp 4D này, chúng ta có thể sử dụng index_img với hàm tạo lát cắt để chọn các khối mong muốn
Sau đó, chúng tôi sẽ sử dụng iter_img để lặp qua chúng theo cùng một công thức như trước
Datasets are stored in: ['/home/yasmin/nilearn_data']8
Nếu bạn chưa quen với Python, một điều cần lưu ý là hàm tạo lát sử dụng lập chỉ mục dựa trên 0. Bạn có thể xác nhận điều này bằng cách khớp các lát cắt này với ô trước đó ở trên
Datasets are stored in: ['/home/yasmin/nilearn_data']9
âm mưu. show rất hữu ích để buộc hiển thị các số liệu khi chạy bên ngoài IPython
def LikeBeta[rho0,r0,beta]:
M0 = 10**rho0*r0_array[r0]**3
I = cst*M0*sigma_los_beta[beta,:,r0]
S = dv**2+I
res = [np.log[S] + [v-u]**2/S].sum[]
return res/2.
80Tóm lại, hình ảnh thần kinh [niimgs như chúng tôi gọi chúng] có nhiều hương vị khác nhau
Hình ảnh 3D, chỉ chứa một khối lượng não
Hình ảnh 4D, chứa nhiều khối lượng não
Thông tin chi tiết về các định dạng đầu vào trong nilearn cho hình ảnh 3D và 4D được cung cấp trong phần tài liệu. Nhập dữ liệu. tên tệp hoặc đối tượng hình ảnh .
Các hàm chấp nhận hình ảnh 3D hoặc 4D và chúng ta cần sử dụng một mặt
def LikeBeta[rho0,r0,beta]:
M0 = 10**rho0*r0_array[r0]**3
I = cst*M0*sigma_los_beta[beta,:,r0]
S = dv**2+I
res = [np.log[S] + [v-u]**2/S].sum[]
return res/2.
81 hoặc def LikeBeta[rho0,r0,beta]:
M0 = 10**rho0*r0_array[r0]**3
I = cst*M0*sigma_los_beta[beta,:,r0]
S = dv**2+I
res = [np.log[S] + [v-u]**2/S].sum[]
return res/2.
82 để chia nhỏ hình ảnh 4D thành hình ảnh 3D và mặt khác def LikeBeta[rho0,r0,beta]:
M0 = 10**rho0*r0_array[r0]**3
I = cst*M0*sigma_los_beta[beta,:,r0]
S = dv**2+I
res = [np.log[S] + [v-u]**2/S].sum[]
return res/2.
83 để nhóm danh sách hình ảnh 3D thành hình ảnh 4D