我试图在6参数函数的参数空间上运行以研究它的数值行为,然后再尝试做任何复杂的事情,所以我正在寻找一种有效的方法来做到这一点.
给定6-dim numpy数组作为输入,我的函数采用浮点值.我最初尝试做的是:
首先,我创建了一个函数,它接受2个数组并生成一个数组,其中包含来自两个数组的所有值组合
from numpy import *
def comb(a,b):
c = []
for i in a:
for j in b:
c.append(r_[i,j])
return c
Run Code Online (Sandbox Code Playgroud)
然后我习惯reduce()将它应用于相同数组的m个副本:
def combs(a,m):
return reduce(comb,[a]*m)
Run Code Online (Sandbox Code Playgroud)
然后我评估我的功能如下:
values = combs(np.arange(0,1,0.1),6)
for val in values:
print F(val)
Run Code Online (Sandbox Code Playgroud)
这有效,但它太慢了.我知道参数的空间很大,但这不应该太慢.在这个例子中我只抽取了10 6(一百万)个点,并且创建数组花了超过15秒values.
你知道用numpy做这个更有效的方法吗?
F如果有必要,我可以修改函数获取它的参数的方式.
所以我正在尝试numpy,我在rollaxis方法中遇到了一个奇怪的(?)行为.
In [81]: a = np.ones((4, 3, 2))
In [82]: a.shape
Out[82]: (4, 3, 2)
In [83]: x = np.rollaxis(a, 2)
In [84]: x.shape
Out[84]: (2, 4, 3)
In [85]: np.rollaxis(x, -2).shape
Out[85]: (4, 2, 3)
Run Code Online (Sandbox Code Playgroud)
-2不应该反转rolrolis?我要做的是应用一个只能在2坐标第一时应用的矩阵.但后来我想把我的阵列恢复原状.我发现工作的唯一的事情是申请np.rollaxis(x, 2)两次,或申请np.rollaxis(x, 0, start=3).我只是通过猜测发现了这些,我不知道它们为什么会起作用.他们似乎也模糊了我真正想做的事情.有人可以解释一下我应该"扭转"滚动的方式,或者我做错了什么?
(有这样的pythonic方法吗?)
我正在尝试在 Python 中的两个图像之间进行插值。
图像具有形状 (188, 188)
我希望在这两个图像之间插入图像。假设 Image_1 位于位置 z=0,而 Image_2 位于位置 z=2。我想要位置 z=1 的插值图像。
我相信这个答案(MATLAB)包含类似的问题和解决方案。
我尝试将此代码转换为 Python,如下所示:
from scipy.interpolate import interpn
from scipy.interpolate import griddata
# Construct 3D volume from images
# arr.shape = (2, 182, 182)
arr = np.r_['0,3', image_1, image_2]
slices,rows,cols = arr.shape
# Construct meshgrids
[X,Y,Z] = np.meshgrid(np.arange(cols), np.arange(rows), np.arange(slices));
[X2,Y2,Z2] = np.meshgrid(np.arange(cols), np.arange(rows), np.arange(slices*2));
# Run n-dim interpolation
Vi = interpn([X,Y,Z], arr, np.array([X1,Y1,Z1]).T)
Run Code Online (Sandbox Code Playgroud)
但是,这会产生错误:
ValueError: The points in dimension …Run Code Online (Sandbox Code Playgroud) 我想将一些由另一个网络训练的权重转移到TensorFlow,权重存储在一个向量中,如下所示:
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
通过使用numpy,我可以将它重塑为两个3乘3的过滤器,如下所示:
1 2 3 9 10 11
3 4 5 12 13 14
6 7 8 15 16 17
Run Code Online (Sandbox Code Playgroud)
因此,我的过滤器的形状是(1,2,3,3).但是,在TensorFlow中,过滤器的形状为(3,3,2,1):
tf_weights = tf.Variable(tf.random_normal([3,3,2,1]))
Run Code Online (Sandbox Code Playgroud)
在将tf_weights重塑为预期形状后,重量变得混乱,我无法获得预期的卷积结果.
具体来说,当图像或滤镜的形状是[数字,通道,大小,大小]时,我写了一个卷积函数,它给出了正确的答案,但它太慢了:
def convol(images,weights,biases,stride):
"""
Args:
images:input images or features, 4-D tensor
weights:weights, 4-D tensor
biases:biases, 1-D tensor
stride:stride, a float number
Returns:
conv_feature: convolved feature map
"""
image_num = images.shape[0] #the number of input images or feature maps
channel = images.shape[1] #channels of an image,images's shape should be like [n,c,h,w] …Run Code Online (Sandbox Code Playgroud) 假设我的数据取决于4个变量:a,b,c和d.我想插值返回一个对应于a和b的单个值的二维数组,以及一个c和d的值数组.但是,阵列大小不必相同.具体而言,我的数据来自晶体管模拟.电流取决于4个变量.我想绘制一个参数变化.参数上的点数远小于水平轴的点数.
import numpy as np
from scipy.interpolate import interpn
arr = np.random.random((4,4,4,4))
x1 = np.array([0, 1, 2, 3])
x2 = np.array([0, 10, 20, 30])
x3 = np.array([0, 10, 20, 30])
x4 = np.array([0, .1, .2, .30])
points = (x1, x2, x3, x4)
Run Code Online (Sandbox Code Playgroud)
以下作品:
xi = (0.1, 9, np.transpose(np.linspace(0, 30, 4)), np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)
Run Code Online (Sandbox Code Playgroud)
这样做:
xi = (0.1, 9, 24, np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)
Run Code Online (Sandbox Code Playgroud)
但不是这个:
xi = (0.1, 9, np.transpose(np.linspace(0, 30, 3)), …Run Code Online (Sandbox Code Playgroud)