python的新手,并尝试自学语言。我理解R和SAS的基础知识但是我仍在学习如何操作数组并学习spyder中的基本python。
我真的很乐意帮助你将x和y都输入函数f(x,y)(例如sin(xy))。
通常在R中,我会通过扩展x和y的值来创建数据框来创建每个组合(每行唯一的x和y)然后通过我的函数运行我的这些行并在我的数据框中附加一个新列,并且使用晶格等绘制等高线图
对于相同的函数f(x,y)= z = sin(x,y),在python中我试过了
x = np.linspace(0, 1, 100)
y = np.linspace(-1, 11, 100)
z= np.equ(x,y)
这显然不会起作用,但我不确定该怎么做。
尝试操作以下代码后尝试:Matplotlib line plot of x values against y:
import numpy as np
import matplotlib.pyplot as plt
fig,ax = plt.subplots(1)
# create some x data and some integers for the y axis
x = np.array([3,5,2,4])
y = np.arange(4)
# plot the data
ax.plot(x,y)
# tell matplotlib which yticks to plot
ax.set_yticks([0,1,2,3])
# labelling the yticks according to your list
ax.set_yticklabels(['A','B','C','D'])
感谢您的帮助!
答案 0 :(得分:1)
在这种情况下,您需要使用itertools.product
。它可用于生成具有所有可能组合的列表。
例如,如果A = [1, 2]
和B = [3, 4]
itertools.product
会返回一个可以存储在这样的数组中的iterable,
C = list(itertools.product(A, B))
# C = [(1,3), (1,4), (2,3), (2,4)]
答案 1 :(得分:1)
如果您使用带有两个参数的ufunc,请使用numpy.meshgrid(),如下所示:
x, y = np.meshgrid(np.linspace(0, 1, 5), np.linspace(-1, 11, 5))
r = np.equal(x, y)
如果你使用自己的函数,它接受两个项的一个参数 - (x,y)或[x,y] ......:
def f(one_d_array):
return one_d_array[0] == one_d_array[1]
从meshgrid
连接x和yq = np.concatenate((x[...,None],y[...,None]), 2)
np.apply_along_axis(f, 2, q)
如果您使用自己的带x和y参数的函数,请使用从meshgrid获取的数组。
def f1(x, y):
'''Returns 4x^2 + 2y^2'''
return 4*np.square(x) + 2*np.square(y)
f1(x, y)
如果数组很大,请尝试通过重构函数来避免使用apply_along_axis来处理整个数组而不是切片。