假设你有一个带有许多(关键字)参数的类,其中大多数都是作为实例变量存储的:
class ManyInitVariables():
def __init__(a=0, b=2, c=1, d=0, e=-1, ... , x=100, y=0, z=9):
Run Code Online (Sandbox Code Playgroud)
你会如何初始化它们__init__?你可以这样做:
class ManyInitVariables():
def __init__(a=0, b=2, c=1, d=0, e=-1, ... , x=100, y=0, z=9):
self.a = a
self.b = b
self.c = c
...
self.z = z
Run Code Online (Sandbox Code Playgroud)
...但需要打字很多!我怎样才能__init__自动获得一些参数,注意其他参数可能不需要作为实例变量分配?
如果我正在使用类型化的内存视图,并且我想添加两个我使用这样的内存视图表示的向量,或者使用它们的点积或其他类似的向量,Cython是否希望我自己实现这些函数?
我对此没有任何问题,但是我想知道如果我正忙于编写添加矢量/乘以标量/点积等等,我是否做错了.靠我自己 感觉就像反模式,但我不确定.
什么是正确的模式?
这是一个答案,可以让人们使用 绘制平面matplotlib,但如果使用 vector [1, 0, 0],则不会绘制任何内容!这是有道理的,因为代码的设置方式(网格在 XY 平面上,然后 Z 点确定表面。
那么,如何使用 matplotlib 绘制 X = 0 平面?
我在 Windows 10 上运行以下 Python 文件:
import subprocess
subprocess.call("dir")
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
File "A:/python-tests/subprocess_test.py", line 10, in <module>
subprocess.call(["dir"])
File "A:\anaconda\lib\subprocess.py", line 267, in call
with Popen(*popenargs, **kwargs) as p:
File "A:\anaconda\lib\site-packages\spyder\utils\site\sitecustomize.py", line 210, in __init__
super(SubprocessPopen, self).__init__(*args, **kwargs)
File "A:\anaconda\lib\subprocess.py", line 709, in __init__
restore_signals, start_new_session)
File "A:\anaconda\lib\subprocess.py", line 997, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
Run Code Online (Sandbox Code Playgroud)
请注意,我在dir这里仅用作示例。我实际上想运行一个更复杂的命令,但在这种情况下我也遇到了同样的错误。
请注意,我没有使用shell=True,所以这个问题的答案不适用:Cannot find the file specified when using subprocess.call('dir', shell=True) in Python
这是第 …
我有一个计算着色器,我想将其输出到图像/缓冲区,该图像/缓冲区旨在作为两个管线(计算管线和图形管线)之间的中间存储。图形管道实际上是一个“虚拟”,因为它除了将中间缓冲区的内容复制到交换链映像中外没有任何作用。DX12弃用了计算管道使用UAVS直接写入交换链映像的功能,因此需要这样做。
在Vulkan的意义上,我认为中间存储应该是“临时”附件:
VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT指定绑定到该映像的内存将被分配VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT(有关更多详细信息,请参见“内存分配”)。可以为可用于创建VkImageView适合用作颜色,分辨力,深度/模板或输入附件的任何图像设置此位。
这在解释这篇文章:
最后,Vulkan包含临时附件的概念。这些是帧缓冲区附件,它们在渲染通道开始时以未初始化或清除的状态开始,由一个或多个子通道写入,被一个或多个子通道消耗,并最终在渲染通道结束时被丢弃。在这种情况下,附件中的数据仅存在于渲染通道中,而无需将其写入主内存。尽管我们仍将为此类附件分配内存,但是数据可能永远不会离开GPU,而只会驻留在缓存中。这样可以节省带宽,减少等待时间并提高电源效率。
DirectX 12是否具有类似的图像使用概念?
在 Vulkan 中,内存资源是通过“视图”中包含的“类指针”元数据来访问的,该元数据描述了应该如何解释内存资源。描述符是向着色器指定该内存将位于“何处”的数据。
在 DirectX 12 中,资源是“内存资源”的缩写(请参阅:https ://www.3dgep.com/learning-directx12-1/ )。资源视图是对允许特定使用的资源的包装。例如,“着色器资源视图”(SRV) 允许着色器访问资源,而“无序访问视图”与 SRV 类似,只不过它允许以任何顺序访问数据。
“恒定缓冲区视图”(CBV) 允许着色器访问比平常更持久/恒定的数据。DirectX 12 文档似乎没有区分 CBV 和常量缓冲区。例如,标题为“Constant Buffer View”的文章说道:
常量缓冲区包含着色器常量数据。它们的价值在于数据会持续存在,并且可以由任何 GPU 着色器访问,直到需要更改数据为止。
任何地方都没有提到“视图”这个词,就好像资源和资源视图之间没有区别一样。文档中发生这种情况的另一个地方是关于资源绑定的文章:
最常见的资源是:
- 恒定缓冲区视图 (CBV)
- 无序访问视图(无人机)
- 着色器资源视图 (SRV)
- 采样器
在列出公共资源时,本文提到了资源视图,就好像它们是同一件事一样。
DirectX 12 中的资源和资源视图有什么区别?
我有很多想要创建的类属性,所以我决定使用一个函数来执行此操作:
def make_index_variables(self):
for index, label in enumerate(self.variable_labels):
eval('self.' + label + '_index = ' + str(index))
Run Code Online (Sandbox Code Playgroud)
如果早些时候,我定义了:
self.variable_labels = ['x', 'y']
Run Code Online (Sandbox Code Playgroud)
我收到这样的错误消息:
eval('self.' + label + '_index = ' + str(index))
self.x_index = 0
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
我开始意识到使用setattr可能比使用更好eval(但我不确定)。无论如何,为什么会eval引发此错误?
B. Stroustrup撰写关于具体课程的文章:
表示可以是私有的......只能通过成员函数访问,但它存在.因此,如果表示以任何重要方式更改,则用户必须重新编译.这是具体类型与内置类型完全相同的代价.
我有点困惑,因为我不明白具体类的表示在运行时如何改变.我可以问这个问题的另一种方法是:如何在编译后"微不足道"地改变具体类的表示?
考虑这个游乐场的例子:
#[allow(dead_code)]
struct Things {
zero: usize,
one: usize,
...
nine: usize,
}
fn do_fancy_calculation() -> (usize, usize, usize, usize, usize) {
(1, 1, 1, 1, 1)
}
impl Things {
fn renew(&mut self) {
// does not work:
// let self {one, two, five, seven, eight} = do_fancy_calculation();
//
let (one, two, five, seven, eight) = do_fancy_calculation();
self.one = one;
self.two = two;
self.five = five;
self.seven = seven;
self.eight = eight;
}
}
fn main() { …Run Code Online (Sandbox Code Playgroud) python ×4
directx-12 ×2
c++ ×1
class ×1
cython ×1
matplotlib ×1
numpy ×1
python-3.x ×1
rust ×1
vulkan ×1
windows-10 ×1